我想重定向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
誰能推薦一個解決方案,或者爲什麼發生這種情況?謝謝。
您是否可以不將錯誤重定向到臨時文件,然後從臨時文件獲取輸出,添加所需的日期和腳本路徑數據,然後將其附加到主錯誤文件? –
謝謝,但說實話,似乎並不是一個好的解決方案。此外,我發佈的內容應該是有效的,但我不明白我錯過了什麼。 – Johnny16
這種技術對我來說是新的,但我懷疑你的代碼失敗的原因是'>> file.log'或'2 >> file.log'重定向'echo'的輸出,而不是輸出'sed ...'過程。 – Beta