2
我需要運行一個命令並在運行時間過長時,在bash腳本中將其殺死。我也需要捕獲所有輸出到一個變量。如果命令先完成,我需要釋放/終止看門狗進程(例如睡眠),因爲我可以運行這些命令的列表。高效超時命令並將輸出捕獲到bash腳本中的變量
不幸的是,「超時」命令不能提供給我,othervise我可以做這樣的事情:
output=`timeout -s 9 $TIMEOUT my-command`
並檢查退出代碼124,看看是否有超時。
因此我選擇的解決方案是by @Dmitry to a similar question:
(my_command) & pid=$!
(sleep $TIMEOUT && kill -HUP $pid) 2>/dev/null & watcher=$!
wait $pid 2>/dev/null && pkill -HUP -P $watcher
不幸的是,下列不捕獲任何到$輸出:
(output=`my_command`) & pid=$!
我可以輸出轉儲到一個文件,然後加載它在像這樣的變量中,但我寧願沒有文件:
(`my_command >$outfile`) & pid=$!
...
output=`cat $outfile`
rm -f $outfile
我的問題:有更好的方法嗎?理想情況下捕獲stderr以及另一個變量而不使用文件?
分組與花括號'{...}',而不是括號完成。 –
@gniourf_gniourf:花括號也可以,但括號確實有效。 –
括號是_subshells_。請參閱bash參考手冊中的[_Grouping Commands_部分](http://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping) –