2016-08-11 13 views
1

bashスクリプトで作成しようとしているのは、呼び出されたスクリプトが正常に戻ったときに異常終了し、異常終了した場合は異常終了します。 。処理が中止されなかった場合にbashを中止します。逆さにします。

私は

#!/bin/bash 
set -e 
my_process || echo "Program failed as expected. Good!" 
my_process ; echo "Program did not fail as expected. Bad!" ; exit -1 

のようにこれをしようとしているが、私は2つを組み合わせる方法が表示されません。あなたは、コマンドのgroups&&||演算子を使用することができif/elseに代わるものとして

答えて

3
if my_process; then 
    echo "Program did not fail as expected. Bad!" 
    exit -1 
else 
    echo "Program failed as expected. Good!" 
fi 
2

、:

my_process && { echo "Program did not fail as expected. Bad!"; exit -1; } \ 
    || echo "Program failed as expected. Good!" 
+0

これは危険なパターンです。 'a && b || 'b'が成功しなかった場合、' c'は 'c'を実行します。ウィットには、もし本当なら、それから偽。それ以外はlaunch_nukes; fi 'は無害ですが、' true && false || launch_nukes'は私のWarGames 2の脚本の飛び跳ね点です。 –

2

があなたの速記を使用して、ジョンの答えからの拡張:

! my_process && echo "Program failed as expected. Good!" || echo "Program did not fail as expected. Bad!" && exit -1 

!演算子は条件付きブール値を否定しますので、&& .. || ..

EDITこれは、Johnのはるかに使いやすいコードほど明確ではないことに注意してください.3値スタイルの構文で行うことができます。可読性はJohn's answerを推奨します。

+1

Johnの試みは、はっきりと判読可能で拡張性があります。簡略化の必要はありません – hek2mgl

+0

@ hek2mgl確かにそうではありませんが、それだけではそれも三項スタイルの構文を使って行うことができます。 –

+1

編集後に見栄えが良い – hek2mgl

関連する問題