5
我正在使用以下代碼將stderr發送到文件。將bash stderr發送到日誌文件,但前提是存在錯誤
.script >2 "errorlog.$(date)"
問題是,即使錯誤不存在,每次運行腳本時都會創建一個空白日誌文件。我在網上查看了一些書籍,並且只有在存在錯誤的情況下才能確定如何創建日誌文件。
我正在使用以下代碼將stderr發送到文件。將bash stderr發送到日誌文件,但前提是存在錯誤
.script >2 "errorlog.$(date)"
問題是,即使錯誤不存在,每次運行腳本時都會創建一個空白日誌文件。我在網上查看了一些書籍,並且只有在存在錯誤的情況下才能確定如何創建日誌文件。
輸出重定向打開腳本運行前的文件,所以沒有辦法知道,如果該文件將收到任何輸出。你可以做什麼,但是,被立即刪除該文件,如果它捲起爲空:
logfile="errorlog.$(date)"
# Note your typo; it's 2>, not >2
script 2> "$logfile"; [ -s "$logfile" ] || rm -f "$logfile"
我用-f
以防萬一,彷彿$logfile
不存在-s
可能會失敗,不只是如果它是空的。我使用;
來分離命令,因爲$logfile
是否包含任何內容不取決於script
是否成功。
您可以在一個功能包裝這件事,使之更易於使用。
save_log() {
logfile=${1:-errorlog.$(date)}
cat - > "$logfile"
[ -s "$logfile" ] || rm -f "$logfile"
}
script 2> >(save_log)
script 2> >(save_log my_logfile.txt)
沒有這麼重定向到一個文件一樣簡單,並且依賴於非標準功能(進程替換),但不是太糟糕,無論是。
我創建了一個帶有錯誤的示例腳本,並使用了第一個示例。它每次都成功創建一個新的日誌文件。當我運行固定腳本時它仍然會創建一個空白日誌文件,但它不會刪除該文件。你認爲我需要改變RM部分嗎? – bkstack
我明白了。我沒有放在./前面的日誌文件 我用以下來解決它。 日誌文件= 「錯誤日誌$(日期)」。 ./script 2> 「./