Bash
bash: tee 在 exec 之後吃換行符
要將腳本中的 stdout 和 stderr 輸出到控制台和日誌文件,我找到了一個漂亮的 tee 解決方案:
exec &> >(tee log.file)
問題是,有時 tee 似乎在吃換行符。例如,我在退出時有一個陷阱,它列印一個換行符,然後才退出。
trap "echo && exit 55" EXIT HUP INT QUIT KILL
它使 shell 從新行列印提示,而不是
^C
在腳本執行時使用者可能按下的任何位置。當有這樣的對 exec 的呼叫時,它不起作用。
此方法將 stderr 重定向到 stdout,然後通過管道連接到 tee。我認為它更具可讀性。
exec 2>&1 | tee log.file
我已經在我的機器上對此進行了測試,並且沒有遇到“換行吃”的問題。
tee
很可能在收到換行符之前被信號殺死。