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