• ベストアンサー

シェルスクリプトからコマンド存在検査をするには?

シェルスクリプト内で「コマンド(コマンドラインツール)の存在検査」をする方法を伺っても宜しいでしょうか? testコマンドで実験してみましたが、残念乍ダメでした。 環境:Cygwin(bash)、WinXP Pro 全パッチあて 以上どうぞ宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.3

「PATHの通ったところにmakeコマンドがあるか」つまり「フルパスを指定しなくともmakeコマンドが実行できるか」ということを確認したのですよね多分。 test コマンドは、コマンドの有無でなくファイルの有無しか確認できません。 真っ当にやるなら、PATHを : で分解して、各ディレクトリにmakeがあるか順番に見ていきます。 IFS=: ARI=false for d in $PATH do test -x $d/make && ARI=true done if $ARI then echo コマンドあり else echo コマンド無し fi bashであればtypeコマンドを使うのが楽でしょう。 if type -P make >/dev/null then echo コマンドあり else echo コマンド無し fi

simple0123
質問者

お礼

全く仰る通りです。 ご提示頂いた前者のコードでうまくいきました。どうも有難うございました。

その他の回答 (4)

noname#98978
noname#98978
回答No.5

Path 以外にあるコマンドは、whichでは見つかりません。

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.4

whichのmanページがなぜか私のCygwinに入っていないので確実なことは 言えませんが、whichコマンドの戻り値が0ならコマンドは存在します。

noname#39970
noname#39970
回答No.2

コマンドというより 普通にファイルが有るか検査するのと同じifで良いんじゃない?

simple0123
質問者

補足

if[ -e make ] のような感じでやってみましたが、ifの評価式は常にfalseでした。 makeはインストール済です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「コマンド (ラインツール) の存在検査」とは, 何をしたいのでしょうか? test をどのように使って, どのような結果を期待したところどのような結果が得られたのでしょうか?

simple0123
質問者

補足

>何をしたいのでしょうか? コマンドのインストール検査です。 ある仕事をするシェルスクリプトがあるとします。 先頭部で、その仕事に必要なコマンド(ツール)全てが揃っているかを検査、揃っていなければメッセージを出して終了、という工程をやる為の物です。 makeのインストール検査を行う為、test -f make を実行しましたが、結果はtestの結果はfalse(0)でした。