2012-10-17 185 views
1

我遇到了bash腳本的問題。基本上,在我的腳本中,我運行命令bash腳本:執行命令並將其輸出傳遞給awk

bjobs -u $1 

$ 1是腳本參數,它是我的羣集上用戶的ID。如果用戶$ 1在羣集上沒有運行/待處理作業,那麼bjob將打印

No unfinished jobs found 

到stdout。此外,退出狀態爲255。如果用戶$ 1確實有就業機會,bjobs打印:

JOBID USER STAT QUEUE  FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME 
45823 ....... 
45824 ....... 
. 
. 

和退出狀態是0,我想awk來解析bjobs的輸出。我試過

bjobs -u $1 | awk '...' 

其中'...'是我的awk解析程序。這並不奏效,因爲顯然當用戶$ 1沒有運行/待處理作業時,字符串「未找到未完成的作業」是而不是傳遞給awk。

bjobs -u $1 > foo 
awk '...' foo 

有什麼建議嗎?

+0

'bjobs'是否真的將消息發送到標準輸出?它不是去stderr嗎? – choroba

+0

嗨,@choroba,是的,它看起來像bjobs發送消息「沒有找到未完成的作業」stderr,而當它找到作業時,它寫入標準輸出。因此,將stderr重定向到stdout可以解決問題。 – DeltaIV

回答

3

也許這消息(是各種各樣的錯誤,我猜)即將STDERR不是STDOUT。

您可以在bash中使用>重定向IO流到文件描述符,2是STDERR。

嘗試:

bjobs -u $1 2>&1 | awk '...' 

,看看是否能解決它。 2> & 1部分表示將STDERR(2)重定向到STDOUT(1),並且STDOUT是通過管道傳輸到awk中的。

更多信息:http://www.tldp.org/LDP/abs/html/io-redirection.html

+0

優秀!這工作得很好。非常感謝! – DeltaIV

相關問題