2011-04-19 46 views
14

我想知道为什么代码块在下面这个例子中使用:代码块使用{}在bash

possibly_hanging_job & { sleep ${TIMEOUT}; eval 'kill -9 $!' &> /dev/null; } 

这可能是这样写的(不使用代码块为好)..right?

possibly_hanging_job & 
sleep ${TIMEOUT} 
eval 'kill -9 $!' &> /dev/null 

回答

19

将最后两个命令放在大括号中,可以清楚地说明:“这些不仅仅是两个额外的命令,我们发生要在可能挂起的长时间运行的进程之后运行;他们,相反,整体以得到它正确关闭之前,我们与shell脚本的其余部分继续“如果提交人,而不是写:

command & 
a 
b 
c 

它不会是完全清楚,ab只是部分获取command正确结束。通过写这样的:

command & {a; b} 
c 

笔者使得它更清晰的是ab用于获取command完全结束,实际下一步骤之前清理而存在的,c发生。

0

是的,我没有看到任何理由让大括号出现在这里。

2

其实我甚至想知道为什么有eval。据我所见,它也应该没有这个工作。

关于您的实际问题: 我猜这个代码块是为了强调sleep属于kill。但没有必要。它也应该像这样工作:

possibly_hanging_job & sleep ${TIMEOUT}; kill -9 $! &> /dev/null