私がこれを呼ぶ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 'コマンド'と比較して()スタイルのブロックを使用する場合、スペースを含む引数文字列やその他の特別なシェル構文をエスケープすることを心配する必要はありません。シェル構文を直接使用します。これは、残りのコードの通常の部分です。