2011-04-19 69 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