Bash

bash: tee 在 exec 之後吃換行符

  • February 25, 2016

要將腳本中的 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很可能在收到換行符之前被信號殺死。

引用自:https://unix.stackexchange.com/questions/265818