第1稿: コマンドの存在チェック
あるコマンドが存在するとき exit するスクリプトを次のように書いた.
if which $CMD ; then echo "$CMD already exists." exit 0 fi
第2稿: 実行可能チェックを追加(バグ入り)
第1稿のスクリプトでは,
- コマンドへのパスが存在するか
のチェックしかしていない.というわけで,
- コマンドへのパスが存在していて,かつ
- コマンドが実行可能かどうか
が成り立つかチェックするようにスクリプトを改造.
if [ -x `which $CMD` ]; then echo "$CMD already exists." exit 0 fi
第3稿: 文字列化が必要
第2項では,スクリプトが存在しない場合でもif文の中が実行されてしまう.
その理由は以下のスクリプトを実行すれば分かる.
if [ -x ]; then echo "こっちが実行される" else echo fi if [ -x "" ]; then echo else echo "こっちが実行される" fi
つまり,-x には文字列を与えたほうがいい,ということなので第3稿.
if [ -x "`which $CMD`" ]; then echo "$CMD already exists." exit 0 fi