31

私がこれを呼んでいるbashスクリプトを持っていると想像してみましょう:

bash -c "some_command"
do something with code of some_command here

のコードを取得することは可能some_commandですか?some_commandスクリプトの環境を変更したくないため、スクリプトを実行しているシェルで直接実行していません。

4

3 に答える 3

34

$?some_command通常どおりの戻りコードが含まれます。

もちろん、コマンドを実行する前に何か問題が発生した場合に備えて、bashのコードが含まれている場合もあります(ファイル名が間違っているなど)。

于 2010-03-31T20:09:43.823 に答える
33

これは、 PaggasMatti$?が言及した括弧のサブシェルの図です。

$ (exit a); echo $?
-bash: exit: a: numeric argument required
255
$ (exit 33); echo $?
33

前者の場合、コードはBashエラーであり、後者の場合、それはの終了コードですexit

于 2010-03-31T22:05:57.463 に答える
7

変数を使用できます。$?これについてはbashのドキュメントを確認してください。これにより、最後のコマンドの終了ステータスが保存されます。

また、bashのブラケットスタイルのコマンドブロック(例comm1 && (comm2 || comm3) && comm4)を確認することもできます。これらは常にサブシェルで実行されるため、現在の環境を変更することはなく、より強力です。

編集:たとえば、bash -c'コマンド'と比較して()スタイルのブロックを使用する場合、スペースを含む引数文字列やその他の特別なシェル構文をエスケープすることを心配する必要はありません。シェル構文を直接使用します。これは、残りのコードの通常の部分です。

于 2010-03-31T20:10:10.017 に答える