循环后台作业


81

我尝试在bash中的for循环中运行后台作业:

for i in $(seq 3); do echo $i ; sleep 2 & ; done

我收到错误消息:

bash: syntax error near unexpected token `;'

在zsh中,命令行有效。


3
您想在背景中放置哪一位?作为读取你正在试图做背景的睡眠这将是毫无意义的..
BugFinder

4
睡眠只是在真实情况下测试我的循环。
bougui 2012年

Answers:


122

除掉 ; 睡觉后

for i in $(seq 3); do echo $i ; sleep 2 & done

顺便说一句,这样的循环最好在带有适当缩进的单独行上编写(如果要在Shell脚本文件中编写)。

for i in $(seq 3)
do
   echo $i
   sleep 2 &
done

4
请记住,它只会将“ sleep 2”发送到后台。
tamerlaha

为什么当我$i在后台命令中执行此操作时,作业控制提示进程名称包含的$i不是实际的$iwas值,为什么?
Michael

@Michael输出完整的程序将有助于更好地理解
gammay

for I in <whatever>; do rm -fr $I & done...- jobs>rm -fr $I几次,而不是为每个作业删除实际的目录
Michael

我对此有很长的答案。因此,我认为您应该将其发布为新问题(并在此处添加该问题链接),我会回答,您也会得到更多答复。
gammay

42

您可以在()中放入背景命令

for i in $(seq 3); do echo $i ; (sleep 2 &) ; done

9
请注意:您由此创建了一个子外壳。这也意味着您将无法wait结束后台作业。
肯尼迪国际
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.