2017-07-29 41 views
0

我想重定向stderr輸出到腳本內的文件在bash中,併爲每個錯誤輸出寫入,我想添加一個前綴包含當前腳本名稱和時間戳。這是我做的方式:我用從其他this文章的信息在腳本中重定向標準錯誤,並添加前綴

exec 2> >(sed "s/^/\n$(date +'%Y%m%d%H%M%S') - JOB: $(basename $BASH_SOURCE)\n\n/" >&2) 2>> file.log 
echo This goes to stderr >&2 

,還有最後一個重定向>> file.log而不是2>> file.log,但如果我不喜歡這樣,然後我就得到了標準錯誤控制檯(也添加了前綴)和文件中的stdout。

所以這就是爲什麼我在2>> file.log中添加了2,因爲sed替換也輸出到stderr,所以這樣重定向工作正常,但不添加前綴。因此,而不是越來越:

20170729100156 - JOB: script.sh 

This goes to stderr 

我只得到:

This goes to stderr 

誰能推薦一個解決方案,或者爲什麼發生這種情況?謝謝。

+0

您是否可以不將錯誤重定向到臨時文件,然後從臨時文件獲取輸出,添加所需的日期和腳本路徑數據,然後將其附加到主錯誤文件? –

+0

謝謝,但說實話,似乎並不是一個好的解決方案。此外,我發佈的內容應該是有效的,但我不明白我錯過了什麼。 – Johnny16

+0

這種技術對我來說是新的,但我懷疑你的代碼失敗的原因是'>> file.log'或'2 >> file.log'重定向'echo'的輸出,而不是輸出'sed ...'過程。 – Beta

回答

1

爲什麼不直接將sed的輸出直接重定向到日誌文件?

exec 2> >(sed "s/^/\n$(date +'%Y%m%d%H%M%S') - JOB: $(basename $BASH_SOURCE)\n\n/" >> file.log) 
echo This goes to stderr >&2 
+0

沒有想到這一點。謝謝,它工作。 – Johnny16

相關問題