私は、bashスクリプト(Ubuntu 10.10上)からC++で書かれたコマンドを呼び出しています。コマンドは例外をスローして終了し、スクリプトは中止されます。"set + e"で十分でないときにbashスクリプトを実行し続けるには?
"set + e"または "command || true"を指定しても、スクリプトは続行されません。
スクリプトを続行するにはどうすればよいですか?
私は、bashスクリプト(Ubuntu 10.10上)からC++で書かれたコマンドを呼び出しています。コマンドは例外をスローして終了し、スクリプトは中止されます。"set + e"で十分でないときにbashスクリプトを実行し続けるには?
"set + e"または "command || true"を指定しても、スクリプトは続行されません。
スクリプトを続行するにはどうすればよいですか?
シェルスクリプトは、「trap」コマンドを使用して、9(KILL)以外の信号をトラップできます。特別な信号名「ERR」は、非ゼロエラー状態を意味する。
trap 'error=1' ERR
while true; do
run-external-program
code="$?"
if [[ -n "$error" ]]; then
echo "Caught an error! Status = $code"
error= # reset the error
elif [[ "$code" != 0 ]]; then
echo "Program exited with non-zero code: $code"
fi
done
また、空のコマンドでエラーを無視するシェルに伝えることができます。
trap '' ERR
これが一貫して機能するには、 'set -E'(errtrace)を使う必要があります。通常、サブコマンドはエラートラップを継承しません – Hamy
スクリプトを示し、問題を示し、小さなC++プログラムしてください。 –
'' while:done done'またはstderrを/ dev/nullにリダイレクトします: 'command 2>/dev/null'?また、あなたのスクリプトをポストしてください! – Cipi
それは失敗していますか? –