我有一个变量 ,COMMANDS
其中包含以换行符分隔的命令列表(例如,我知道在这种情况下永远不会有换行符,但它们可以用 分隔NUL
)。例如,
echo "foo bar"
tail blah.txt
python3 -c 'print(1 + 10)'
我想调用其中的每一个,但使用进程替换将它们全部作为参数提供给另一个程序。继续这个例子,如果我想输入cat
,那么我希望运行以下命令:
cat <(echo "foo bar") <(tail blah.txt) <(python3 -c 'print(1 + 10)')
有没有办法动态地做到这一点?我能想到的最好的解决方案是将这个命令构造为字符串并将其提供给bash -c
:
bash -c "cat$(echo "$COMMANDS" | while read -r p; do printf ' <(%s)' "$p"; done)"
但这感觉有点脆弱(我怀疑它是否能够稳健地处理输入边缘情况,例如引号)。
对于任何想要尝试的人,这里有一个快速命令来设置我用作示例的内容:
COMMANDS=$(printf 'echo "foo bar"\ntail blah.txt\npython3 -c "print(1 + 10)"')
echo blah > blah.txt