私がこれを呼んでいるbashスクリプトを持っていると想像してみましょう:
bash -c "some_command"
do something with code of some_command here
のコードを取得することは可能some_command
ですか?some_command
スクリプトの環境を変更したくないため、スクリプトを実行しているシェルで直接実行していません。
$?
some_command
通常どおりの戻りコードが含まれます。
もちろん、コマンドを実行する前に何か問題が発生した場合に備えて、bashのコードが含まれている場合もあります(ファイル名が間違っているなど)。
これは、 PaggasとMatti$?
が言及した括弧のサブシェルの図です。
$ (exit a); echo $?
-bash: exit: a: numeric argument required
255
$ (exit 33); echo $?
33
前者の場合、コードはBashエラーであり、後者の場合、それはの終了コードですexit
。
変数を使用できます。$?
これについてはbashのドキュメントを確認してください。これにより、最後のコマンドの終了ステータスが保存されます。
また、bashのブラケットスタイルのコマンドブロック(例comm1 && (comm2 || comm3) && comm4
)を確認することもできます。これらは常にサブシェルで実行されるため、現在の環境を変更することはなく、より強力です。
編集:たとえば、bash -c'コマンド'と比較して()スタイルのブロックを使用する場合、スペースを含む引数文字列やその他の特別なシェル構文をエスケープすることを心配する必要はありません。シェル構文を直接使用します。これは、残りのコードの通常の部分です。