Linux bash 脚本 - 命令分组

Tem*_*dUX 2 scripting bash

我是 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)

但我不知道如何写第一个。

Edu*_*ani 5

该 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)