次のパイプラインがあるとします。
cmd1 < input.txt |\
cmd2 |\
cmd4 |\
cmd5 |\
cmd6 |\
(...) |\
cmdN > result.txt
場合によってはとの間にを追加したいと思いますcmd3
。結果を一時ファイルに保存せずに条件付きパイプラインの種類を生成する方法はありますか?私は次のようなことを考えます:cmd2
cmd4
cmd2
cmd1 < input.txt |\
cmd2 |\
(${DEFINED}? cmd3 : cat ) |\
cmd4 |\
cmd5 |\
cmd6 |\
(...) |\
cmdN > result.txt
ベストアンサー1
一般的な&&
AND||
演算子:
cmd1 < input.txt |
cmd2 |
( [ -n "$DEFINED" ] && cmd3 || cat ) |
cmd4 |
cmd5 |
cmd6 |
(...) |
cmdN > result.txt
指定されたとおりこの回答if ... else
, if-else 構文を使用する場合は、一般的に好ましい。
...
cmd2 |
if [ -n "$DEFINED" ]; then cmd3; else cat; fi |
cmd4 |
...
(行がパイプで終わる場合は、後続のバックスラッシュは必要ありません。)
修正する~によるとヨナスの観察。 cmd3がゼロ以外の終了コードで終了する可能性があり、残りの入力を処理したくない場合は、
論理を逆にします。cat
cmd1 < input.txt |
cmd2 |
( [ -z "$DEFINED" ] && cat || cmd3 ) |
cmd4 |
cmd5 |
cmd6 |
(...) |
cmdN > result.txt