これまでに与えられたすべての答えはに置き換えcmd3
られcat
ます。また、次のコマンドを実行しないようにすることもできます。
if [ -n "$DEFINE" ]; then
alias maybe_cmd3='cmd3 |'
else
alias maybe_cmd3=''
fi
cmd1 |
cmd2 |
maybe_cmd3
cmd4 |
... |
cmdN > result.txt
それはPOSIXですが、ノートであれば、そのbash
スクリプトbash
ではありませんsh
(スクリプトが始まると同じように-mode #! /path/to/bash
)、あなたとエイリアス展開を有効にする必要がありますshopt -s expand_aliases
(またはset -o posix
)。
不要なコマンドをまだ実行しない別のアプローチは、evalを使用することです。
if [ -n "$DEFINE" ]; then
maybe_cmd3='cmd3 |'
else
maybe_cmd3=''
fi
eval "
cmd1 |
cmd2 |
$maybe_cmd3
cmd4 |
... |
cmdN > result.txt"
または:
eval "
cmd1 |
cmd2 |
${DEFINE:+cmd3 |}
cmd4 |
... |
cmdN > result.txt"
(少なくとも)Linuxでは、代わりにcat
、あなたが使用することができますpv -q
使用するsplice()
のではなく、read()
+ write()
データは、カーネルとユーザー空間との間で二回移動する必要がなくなり2本のパイプ間の間でデータを渡すために。