« ^ »

lsコマンドでTHE ALFEEを表示する

所要時間: 約 2分

THE ALFEEについて

THE ALFEE は日本の音楽業界を代表するロックバンドだ。多くの人がそのバンド名を知っているし、バンド名を知らない人でも THE ALFEE の曲を少しは聞いたことがある人も多いだろう。もしかしたら知らず知らずの内に耳にしたのかもしれない。

lsについて

ls はソフトウェア業界を代表するプログラムだ。多くの人がそのプログラム名を知っているし、UNIX系OSを使った事のない人でも ls コマンドを使ったある人も多いだろう。もしかしたらディレクトリ内を表示する時には無意識に ls と打ってしまうかもしれない。

lsとTHE ALFEE

ls は所謂CLIのプログラムであり、ターミナルエミュレータやコンソールで起動したシェル上で ls(エンターキー入力) と入力し、そのディレクトリ内にあるファイルやディレクトリを表示する。

ls のオプション引数はとても多い。オプション引数というのは、コマンドを実行する時に、コマンドの挙動を変更するために指定する値だ。例えば ls と打つだけではファイルやディレクトリの名しか表示されないが、 ls -l と打つとファイルやディレクトリの名の他に作成日時や権限なども表示される。 ls には多くのオプション引数が用意されていて、細やかに挙動を変更できるようになっている。

ある日、lsコマンドの説明1を見ていて、t, h, e, a, l, f, eのオプション引数がある事に気が付いた。これは並べ変えたり組み合せたりすると the alfee と表現できる。もしもこのオプション引数で ls を実行した時に期待する挙動は、ファイル名を表示することではなく THE ALFEE が表示されることだ。どう考えてもそうだ。そうでなければ、わざわざこの組み合わせのオプション引数を使わないだろう。そこで ls コマンドに -the -alfee オプションを組み込むことにした。

ls -the -alfee

ls の中に本当に組み込みたかったが、lsのバイナリを置き換えるのはとても不安だ。なぜなら ls は本当に基本的なコマンドで、とても重要であり、バグると目も当てられないことになりかねない。そこで、バイナリにするのではなく、bash関数として ls コマンドをラップすることにした。これで、とても安全に ls -the -alfee を使用できる。以下にソースコードを置いておく。

set -e -x

LS_PATH=/bin/ls
IMGCAT_URL=https://www.iterm2.com/utilities/imgcat
IMAGE_URL=
IMGCAT_PATH=$THE_ALFEE_ROOT/imgcat
IMG_PATH=$THE_ALFEE_ROOT/the_alfee.jpg
THE_ALFEE_ROOT=$HOME/.the-alfee

mkdir -p $THE_ALFEE_ROOT


if [ ! -e $IMG_PATH ]
then
    curl -o $IMG_PATH $IMAGE_URL
fi

if [ ! -e $IMGCAT_PATH ]
then
    curl -o $IMGCAT_PATH $IMGCAT_URL
    chmod +x $IMGCAT_PATH
fi

function ls () {
    if [ "-the" = "$1" ] && [ "-alfee" = "$2" ]
    then
        $IMGCAT_PATH $IMG_PATH
    else
	$LS_PATH "$@"
    fi
}
ls-the-alfee.sh

1

usage