2009-01-15 58 views
4

我有一個簡單的腳本,用於啓動另一個程序。這個其他程序有時可能產生一個SIGSEGV,這會中斷我的輸出。因此,我添加了幾行應該暫時將stderr重定向到/dev/null,以便忽略SIGSEGV。以下是我的代碼草案:stderr在bash腳本中的臨時重定向

exec 2> /dev/null 
progname >& ./tmp/run.txt && run_status='OK' 
exec 2>1 

的問題是,最後一行沒有做我想做的。第一行顯然有效,並重定向stderr。最後一行應該是將stderr返回到之前的位置(我只能假設它與stdout相同)。

任何幫助將appriciated!

+0

爲什麼使用「>&」如果你不想讓stderr進入輸出文件? – 2009-01-15 15:28:28

+0

停止程序運行的分段錯誤不會由程序本身輸出。我不知道這是爲什麼,但這意味着我不關心程序的錯誤(這就是爲什麼我使用「>&」),而是腳本本身。 – 2009-01-15 15:33:39

+0

即使將stderr重定向到/ dev/null,信號仍不會停止您的程序?這有什麼幫助?無論如何,你不應該執行2>/dev/stderr讓它回到stderr嗎? – jishi 2009-01-15 15:36:16

回答

8

另一種選擇是:

exec 3> /dev/stderr 2> /dev/null 
progname >& ./tmp/run.txt && run_status='OK' 
exec 2>&3 

甚至

exec 3>&2 2> /dev/null 
progname >& ./tmp/run.txt && run_status='OK' 
exec 2>&3 

這樣的劇本保留了輸出和錯誤分離爲腳本(即腳本stdout和stderr可以單獨重定向。

0

爲什麼不只是將它重定向到progname只運行?

progname > ./tmp/run.txt 2>/dev/null && run_status='OK' 

或可能

{ 
    progname > ./tmp/run.txt && run_status='OK' 
} 2>/dev/null