我需要创建一个由各种不同命令组成的管道。管道中的某些元素或元素序列只有在满足特定条件时才相关。现在,我可以这样写:
if [[ $whatever ]]; then
cmd1 | cmd2 | cmd3 | cmd4
else
cmd1 | cmd4
fi
但这意味着需要重复cmd1
和cmd4
,而且可能有几个条件,我不想写嵌套的if语句。所以,我尝试写出以下代码:
if [[ $whatever ]]; then
pipeline_segment="| cmd2 | cmd3"
else
pipeline_segment=""
fi
cmd1 ${pipeline_segment} | cmd4
但是,管道符号没有被解释为使用管道的指令。
我应该如何让bash执行我想要的管道?
注意:如果必须,您可以假设bash版本为4或更高版本。
eval
或将提交给ssh
的复合命令类似:bash -c "cmd1 ${pipeline_segment} | cmd4"
(请注意可能需要转义嵌入的双引号等) - undefined