在终端(bash)中,以下工作正常:
cat <(echo "hello")
但如果我这样做:
sh -c 'cat <(echo "hello")'
我得到了
sh: 1: Syntax error: "(" unexpected
你能解释一下原因吗?
顺便说一句,我的总体目标是在shell脚本中编写此命令:
watch -n 1 'cat <(iptables -L INPUT) <(iptables -L FORWARD)'
但它不起作用,原因似乎是上述问题。
答案 0 :(得分:2)
sh
通常为dash
而非bash
(请参阅man sh
)。
dash
没有进行流程替换,只有POSIX的东西。
您需要这样做:
bash -c 'cat <(echo "hello")'
ksh
&amp; zsh
也可以进行流程替换。
通过您的示例,您可以执行以下操作:
watch -n 1 'iptables -L INPUT; iptables -L FORWARD'
不需要高级shell或进程子代码。
答案 1 :(得分:0)
语法错误的原因是sh
未与您系统上的bash
相关联,并且不理解process substitution,这不是POSIX标准的一部分。
我建议使用以下命令,该命令更清晰,适用于任何POSIX兼容shell:
while true ; do
clear
iptables -L INPUT
iptables -L FORWARD
sleep 1
done