24

コマンドがシェル スクリプトから任意の POSIX システムに存在するかどうかを確認できるようにしたいと考えています。

Linux では、次のことができます。

if which <command>; then
   ...snip...
fi

ただし、Solaris と MacOSwhichは、コマンドが存在しない場合に終了エラー コードを表示せず、エラー メッセージを STDOUT に出力するだけです。

また、whichコマンド自体が POSIX ではないことを最近発見しました ( http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.htmlを参照) 。

何か案は?

4

5 に答える 5

31

command -vwhich が行うことを行う POSIX 指定のコマンドです。

コマンドが見つからない場合やエラーが発生した場合に >0 を返すように定義されています。

于 2009-04-18T00:55:47.790 に答える
3

終了コードをチェックするのではなく、「which」の stdout/stderr を変数または配列 (バックティックを使用) に読み込むことができます。

システムに「which」または「where」コマンドがない場合は、$PATH 変数の内容を取得し、すべてのディレクトリをループして、指定された実行可能ファイルを検索することもできます。それが本質的に何をするかです (ただし、$PATH 結果のキャッシュ/最適化を使用する場合があります)。

于 2009-04-18T00:34:43.740 に答える