これが重複する質問である場合は、事前に謝罪します。ここで質問する前に、検索/チェックに力を入れました。
私はこのようなワンライナーを書くことに慣れています:
foocommand && foocommand2 && foocommand3
前のコマンドが「成功」した場合にのみ、後続のコマンドを実行したいという考えです。
私はやや長いスクリプトを書いていますが、このワンライナーは、他の人にとっては混乱を招くコードの巨大なブロックのように見えるため、実行できません。
コマンドの間隔をあけて、スクリプトの間にコマンドの間にコメントを書きたいと思います。これをどのように実行しても、&&と同等のものがそこにありますか?
あなたはこのようにそれを行うことができます:
#!/bin/sh
ls -lh &&
# This is a comment
echo 'Wicked, it works!'
あなたが正しく質問したことを理解できれば幸いです。
シバン行を次のように変更できます
#!/bin/bash -e
エラーが発生すると、スクリプトは停止します。
set -e
のアイデアが気に入らない場合は、ロジックを反転させることができます。
foocommand || exit 1
foocommand2 || exit 2
foocommand3 || exit 3
より便利なのは、exit
を何かに置き換えて有用なエラーメッセージを出力し、終了することです。もちろん、関数の中ではreturn
ではなくexit
が必要です。
代わりにif else fi
ブロックを使用できます。
if foocommand; then
# some comments
if foocommand2; then
# more comments
foocommand3
fi
fi
それはもう少し読みやすいです。
または、\
を使用して、大きな1ライナーを数行に分割することもできます
foocommand && \
# some comment
foocommand2 && \
# more comment
foocommand3
しかしもちろん、これは訓練されていない目を混乱させる可能性があります。
ネストされたif
ステートメントの使用を検討できます。他のオプションは、カーリーを使用して{ true && echo hi; } || echo huh
更新1:
改行/コメントなしの例は次のとおりです。
{ { false && echo "inner true"; } && { echo "inner true" && true; } || { echo "inner false" && false; } || echo "outter false"; }
コマンドの各シーケンスを関数に分割します。
big_block_1() {
# ...
}
big_block_2() {
# ...
}
big_block_3() {
# ...
}
big_block_1 && big_block_2 && big_block_3
私はいつも「失敗」関数を書くのが好きです。これにより、失敗が発生したときに行うことを指定し、||
パターン。次のように:
function fail() {
echo "Failure: ${@}"
exit 1
}
foocommand || fail "couldn't foo"