#!/bin/sh
スクリプトが最初のエラーで終了するように、最初の行としてシェルスクリプトを作成しています。command || true
コマンドが失敗した場合にスクリプトがすぐに終了しないように、ファイルにはの形式の行がいくつかあります。ただし、コマンドの終了コードを知りたいのですが。set +e
その動作を一時的に無効にするために使用せずに終了コードを取得するにはどうすればよいですか?
質問する
1413 次
2 に答える
6
あなたの質問はを暗示しているようset -e
です。
仮定set -e
:
代わりにcommand || true
を使用できますcommand || exitCode=$?
。スクリプトは続行され、の終了ステータスcommand
がにキャプチャされexitCode
ます。
$?
最後のコマンドの終了コードを保持する内部変数です。
成功すると||
短絡するので、テストの合間に設定するか、代わりに以下を使用してください。command
exitCode=0
command && 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 に答える