3

#!/bin/shスクリプトが最初のエラーで終了するように、最初の行としてシェルスクリプトを作成しています。command || trueコマンドが失敗した場合にスクリプトがすぐに終了しないように、ファイルにはの形式の行がいくつかあります。ただし、コマンドの終了コードを知りたいのですが。set +eその動作を一時的に無効にするために使用せずに終了コードを取得するにはどうすればよいですか?

4

2 に答える 2

6

あなたの質問はを暗示しているようset -eです。

仮定set -e

代わりにcommand || trueを使用できますcommand || exitCode=$?。スクリプトは続行され、の終了ステータスcommandがにキャプチャされexitCodeます。

$?最後のコマンドの終了コードを保持する内部変数です。

成功すると||短絡するので、テストの合間に設定するか、代わりに以下を使用してください。commandexitCode=0command && exitCode=0 || exitCode=$?

set -eただし、スタイルスクリプトを完全に避け、代わりにスクリプト内の各コマンドに明示的なエラー処理を追加することをお勧めします。

于 2012-07-20T18:27:03.053 に答える
3

コマンドのステータスを知りたい場合は、おそらくその値に応じてさまざまなアクションを実行します。この場合、コードは次のようになります。

if command; then
    # do something when command succeeds
else
    # do something when command fails
fi

その場合、コマンドが失敗してもシェルは中止されないため、特別なことをする必要はありません。問題が発生する唯一の理由set -eは、コードを次のように記述した場合です。

command
if test $? = 1; ...

だからそうしないでください。

于 2012-07-21T06:03:19.763 に答える