我是 bash 脚本编写的新手,我对命令的聚合有疑问。正是在这行代码中:
timeout -s 9 1 echo $var | nc localhost port
我正在尝试通过 netcat 将变量 var 的数据发送到特定端口中的本地主机,并且我想将该命令超时 1 秒。阅读超时的手册页,我明白它应该用作:
timeout -s SIGNAL TIME COMMAND
我的问题是如何用管道命令 echo $var | 替换 COMMAND nc localhost 端口并进一步了解如何正确编写以下情况:
COMMAND1 | (COMMAND2 | COMMAND3)
和
(COMMAND1 | COMMAND2) | COMMAND3
如果我是正确的,第二个例子相当于
COMMAND1 | COMMAND2 | COMMAND3
但我不知道第一个怎么写。
答案1
该 COMMAND 将由timeout
而不是来解释。您不能放置子 shell(和bash
内的管道命令)。(
)
您可以将命令放入 shell 脚本中,然后将其名称传递给timeout
.
或者实际上强制 COMMAND 由bash
.这应该有效:
timeout -s 9 1 bash -c "echo $var | nc localhost port"