如何使用 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