条件付きパイプライン

条件付きパイプライン

次のパイプラインがあるとします。

cmd1 < input.txt |\
cmd2 |\
cmd4 |\
cmd5 |\
cmd6 |\
(...) |\
cmdN > result.txt

場合によってはとの間にを追加したいと思いますcmd3。結果を一時ファイルに保存せずに条件付きパイプラインの種類を生成する方法はありますか?私は次のようなことを考えます:cmd2cmd4cmd2

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

おすすめ記事