前提:cat
やls
が使えない環境がある
dockerの一部のコンテナイメージ(k8sのetcdなど)では、cat
やls
と言った基本的なコマンドすら存在しないということが起こりえます。
cat
がない…
ls
もない…
ないなら作れば良いだけ
sh
(Bourne shell)が起動しているなら絶対に使える 組み込みコマンド というものが存在します。
今回はsh
の組み込みコマンドだけを使用し、ls
とcat
を作ります。
ls
を作る
まずはls
ですが、これは簡単でecho *
をエイリアスにするだけです。
alias ls="echo *"
オプションは何もないですが、とりあえずの確認ならこれで十分です。
無事にls
でルートディレクトリの配下が見れるようになりました。
なお、出力結果を色つきにした時の記事もこちらにあるので、参考にどうぞ。
ディレクトリは青、ファイルが白で表示するlsコマンドを以下に記載しておきます。
.sh
function ls
{
for i in *
do
if [ -d $i ]
then
echo -ne "\e[34m$i\e[m\t" # ディレクトリは青色
else
echo -ne "$i\t" # それ以外は白色
fi
done
echo # 改行のためのecho
}
次はcat
を作る
こちらは関数を使います。
function cat
{
while read val
do
echo $val
done
} < $1
val
という変数にファイルの中身を1行ずつ入れて、echo
で表示するだけです。
これを使えば、ファイルの中身を見ることができます。
無事にファイルの中身を見ることができました。
オプションとかは全く再現していない最低限のコマンドの機能ですが、shの標準の機能だけで作ることができました。
まとめ
ls
とかcat
はshの機能だけで再現することが可能です。
なお、別の記事でps
コマンドも作っているので、こちらも参考にしてください。