2010-12-10 6 views
4

私は、bashスクリプト(Ubuntu 10.10上)からC++で書かれたコマンドを呼び出しています。コマンドは例外をスローして終了し、スクリプトは中止されます。"set + e"で十分でないときにbashスクリプトを実行し続けるには?

"set + e"または "command || true"を指定しても、スクリプトは続行されません。

スクリプトを続行するにはどうすればよいですか?

+0

スクリプトを示し、問題を示し、小さなC++プログラムしてください。 –

+0

'' while:done done'またはstderrを/ dev/nullにリダイレクトします: 'command 2>/dev/null'?また、あなたのスクリプトをポストしてください! – Cipi

+0

それは失敗していますか? –

答えて

3

シェルスクリプトは、「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 
+0

これが一貫して機能するには、 'set -E'(errtrace)を使う必要があります。通常、サブコマンドはエラートラップを継承しません – Hamy

関連する問題