Linux

bash:將 stderr 重定向到文件並將 stdout + stderr 重定向到螢幕

  • January 3, 2020

我想將命令的 stderr 流保存到日誌文件中,但我也想在螢幕上顯示整個輸出(stdout + stderr)。我怎樣才能做到這一點?

我只找到了將 stdout + stderr 顯示到控制台並將兩個流也重定向到文件的解決方案:

foo | tee output.file

(https://stackoverflow.com/questions/418896/how-to-redirect-output-to-a-file-and-stdout)

但我只想將 stderr 重定向到日誌文件。

使用最近的 bash,您可以使用程序替換。

foo 2> >(tee stderr.txt)

這只是將 stderr 發送到執行 tee 的程序。

更便攜

exec 3>&1 
foo 2>&1 >&3 | tee stderr.txt

這使得文件描述符 3 成為目前標準輸出(即螢幕)的副本,然後設置管道並執行foo 2>&1 >&3. 這會將 foo 的 stderr 發送到與目前 stdout(即管道)相同的位置,然後將 stdout 發送到 fd 3(原始輸出)。管道將 foo 的原始 stderr 提供給 tee,tee 將其保存在文件中並將其發送到螢幕。

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