2016-08-21 7 views
1

を設定するには、これは面倒です:代替シェルスクリプトでは+ E

#!/bin/sh -e 
# [...] 
set +e 
command-that-is-allowed-to-fail 
set -e 
# [...] 

それはあまりにも、エラーになりやすい見えます。

これを行うより良い方法はありませんか?

が(ちなみに、答えは私が知る限り、適切な質問と回答として、コメントしかし、質問と回答はまだStackOverflowの上に現れていないa partially related question.からに表示されます。)

+0

重複を発見していただきありがとうございます。私はそれを見つけることができなかった。私の質問は*まったく同じではありません。他の質問がBashに特に関係しているからです。しかし、それを閉じるのに十分に近いです。 – thb

答えて

2

はい、 —があるか、どんな速度でも、より慣用的で、より簡潔で、エラーが起こりにくい方法があります。

#!/bin/sh -e 
# [...] 
command-that-is-allowed-to-fail || true 
# [...] 

これはどのように機能しますか? command-that-is-allowed-to-failが失敗した場合、||オペレータは制御をtrueビルトインに渡します。後者はこれを除いて何もしません。決して失敗しません。

なお、falseコマンドもありますが、これ以外は何もしません。常に失敗します。しかし、いくつかのシェル(Dashなど)ではfalseは組み込み関数ではないため、場合によっては/bin/falseなどと呼び出す必要があります。

NOTE

メンターは私に私はそれが私には非自明だったため、私は、自分の技術を発見したであろうことを疑う2004年については、この技術を教えました。しかし、この技術は簡単で魅力的です。技術を学んだ後、私は広範囲にそれを使用しました。あなたもできます。

+1

私は 'を実行します|| : '。 'true'は入力するには長すぎます。 – PSkocik

+0

@PSkocik:どうですか?どうやら、 '|| : 'ダッシュでも動作します。だから、2016年、12年後、私はまだあなたのおかげで何か新しいことを学ぶことができます。あなたのコメントを*回答にすることを選択した場合、*私はそれをupvoteしたいと思います。 – thb

+1

ありがとうございますが、私はポイントについてそれほど気にしません。 ':'は私のシステム上で対応する実行可能ファイルを持っていないことを除いて、 '真'と ':'は全く同義です。 – PSkocik