2014-12-18 284 views
4

這工作得很好(無限循環):Timeouting在Linux中while循環(bash的一個行)shell腳本

$ while TRUE; do printf ".";done 

.................. .................................................. .........

我正在嘗試超時while looptimeout命令。 所有這些不工作:

$ timeout 5 while TRUE; do printf ".";done 
$ timeout 5 "while TRUE; do printf ".";done" 
$ timeout 5 "while TRUE; do printf \".\";done" 
$ timeout 5 $(while TRUE; do printf ".";done) 
$ timeout 5 $('while TRUE; do printf ".";done') 

什麼是正確的方式(如果存在的話)?

回答

8

我認爲你的問題的解決方案是執行另一個shell實例並將適當的命令傳遞給它。 據bash的手冊:

-c  If the -c option is present, then commands are read from the first non-option argument command_string. 

因此,我的解決辦法是這樣的事情:

timeout 5 bash -c -- 'while true; do printf ".";done' 

--確保以下參數將作爲非選項的處理。並且''幫助通過"而沒有不必要的轉義

+0

答案是正確的。但根據論壇規則,對於這兩個附加參數的一些細節是適當的。 –

+0

我已經添加了一些細節到我的答案 – user3188346