より読みやすく、同様のコマンドのリストをより明確にしたいので、少しのターミナルループを作成しました。
for what in \
cache \
thumbs \
; do my template $what:clear; done
うまくいきますが、
my template cache:clear && my template thumbs:clear
簡単で明確に配置する方法はありませんか?&&このようなループで作業すると最後のコマンド終了コードを確認するために、ループ本体にif / elseステートメントを追加し、ゼロ以外の場合にブレークを呼び出すのは複雑ではありませんか?
条件が十分であれば:
for what in \
cache \
thumbs \
; do
my template $what:clear;
if [ $? -ne 0 ]; then break; fi \
; done
ベストアンサー1
あなたが使用できるset -e
:
(set -e;
for what in \
cache \
thumbs;
do my template $what:clear; done)
set -e
コマンドがゼロ以外の終了コードで終了したときにシェルを終了させ、失敗は他に処理されません。上記でmy ...
失敗すると、サブシェル全体が終了し、サブシェルの終了コードは失敗したコマンドの終了コードです。これはシェルスクリプトとコマンドラインで機能します。
別の方法は分離を使用することです。
for what in \
cache \
thumbs; do
my template $what:clear || break
done
欠点は、|| break
すべてのコマンドの後に必要であり、失敗を示す終了コードを無視することです。ループはfor
毎回ゼロの終了コードで終了します。終了コード1を使用してループを終了させるフェイルオーバーを設定することで、break
これを回避できます(これは上記のサブシェルアプローチよりも劣っています)。for
for what in \
cache \
thumbs; do
my template $what:clear || break -1 2>/dev/null
done
(ゼロ以外の終了コードで終了し、対応するbreak -1
エラーメッセージを削除します。)break
2>/dev/null
私が知っている限り、&&
終了ループのような&& done
ものは使用できません。