Unix プログラムが実行可能かどうかを判断する方法

Unix プログラムが実行可能かどうかを判断する方法

ソース環境を作成するためのスクリプトを書いています。PATH 部分の処理は簡単です。しかし、PATH にパスを追加したときにプログラムが正しく実行できるかどうかは、どのように確認すればよいでしょうか。 を使用するだけではwhich不十分です。実行可能ファイルの存在を確認するだけで、実行は確認していないからです。現在、プログラムのバージョン (つまりfind -version) を確認し、返されるメッセージに " command not found" が含まれているかどうかを確認します。これは理想的ではありません。これを実行するより良い方法はありますか?

答え1

あなたが望むことを行う理想的な方法はないと思います。Martin が言うように、実行可能ビットが設定されているかどうかは確認できますが、実際に実行されるかどうかは確認できません。

できることの1つは、プログラムを実行して、プログラム自体の特定のテキストを探す代わりに、変数を見ること$?です。これにより、プログラムの終了ステータス(通常、OKの場合は0)または(私が持っているCentoOSシステムでは)ファイルが見つからない場合は127が返されます。

find --version
if [[ $? == 127 ]]
then
    exit 1
fi

理想的な方法がない理由は、OK の終了ステータス 0 は慣例的なものであり、プログラムが実行されてもエラーが発生した場合は、異なる終了ステータスが返される可能性があるためです。何かが実行されて、何らかのエラー状態を示す終了ステータス 127 が返されるまでは、この方法でも問題ないかもしれません。

答え2

あなたは-x オペレーターファイルに実行可能フラグが設定されているかどうかをテストします。ただし、実行可能ファイルが実際に実行されるかどうかはわかりません。

関連情報