コマンドが使えるかどうかを確認するシェルスクリプトを作成しました。
実行すると、こういう出力を返してくれます。
vi = True (/bin/vi) cmake = True (/usr/local/cmake/bin/cmake) ifconfig = True (/sbin/ifconfig) reboot = True (/usr/bin/reboot) asdf = False
2つの方法があります。
環境変数PATHを使う方法
一つ目は、環境変数PATHの中を捜す方法。これはシンプルで正統的な方法ですが、aliasでパスを通している場合に見つからないという欠点があります。
commandCheckFromPath.sh
#!/bin/bash function checkCmd() { cmd=$1 IFS=: for d in $PATH; do if [ -x $d/$cmd ]; then #echo "$d/$cmd" echo 0 exit fi done echo 1 } function printCmd() { cmd=$1 printf " %-10s = " ${cmd} if [ `checkCmd ${cmd}` -eq 0 ]; then echo "True (`which ${cmd}`)" else echo "False" fi } cmds=( vi cmake ifconfig reboot asdf ) for c in ${cmds[@]}; do printCmd $c done
whichの終了コードを使う方法
二つ目の方法は、whichコマンドの終了コードを確かめる方法。whichコマンドを使うとそのコマンドが使えるかどうかを確認してくれますが、コマンドがなかった場合は終了コードが1になるようです。その仕組みを利用してシェルスクリプト内でコマンドの存在可否を確かめます。
#!/bin/bash cmds=( vi cmake ifconfig reboot asdf ) for c in ${cmds[@]}; do which $c >& /dev/null rst=$? printf " %-10s = " $c if [ ${rst} == 0 ]; then path=`which $c` echo "True ($path)" else echo "False" fi done
私の環境ではどちらのコードも同じ結果になりました。