在后台多次运行同一命令

在后台多次运行同一命令

如何使用 bash 运行多个命令并在后台运行它们?

例如:

$ for i in {1..10}; do wait file$i &; done

其中 wait 是自定义二进制文件。

现在我收到一个错误:

syntax error near unexpected token `;'

运行上述命令时。

一旦进入后台,命令就应该并行运行。

答案1

&,就像是;一个列表终止符操作员。它们具有相同的语法并且可以互换使用(取决于您想要做什么)。这意味着你不想要,也不需要,,command1 &; command2你需要的只是command1 & command2

因此,在您的示例中,您可以编写:

for i in {1..10}; do wait file$i & done

每个wait命令都将在后台启动,循环将立即转到下一个命令。

答案2

为了兼容性,使用 posix 形式而不是扩展:

for i in $(seq 1 10); do (./wait file$i &); done

答案3

您可以对命令进行分组并将分组的命令置于后台。喜欢 :

$ for i in {1..10}; do ((wait file$i)&); done

答案4

你的二进制文件真的有名字吗wait?我不建议这样做,因为它wait是 shell 内置的。

我相信 bash 不能很好地解析启动后台进程的单行循环。我建议你将代码更改为:

$ for i in {1..10}; do ./wait file$i & echo "Running 'wait' using PID=$!..."; done

相关内容