Linux
bash:將 stderr 重定向到文件並將 stdout + stderr 重定向到螢幕
我想將命令的 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 將其保存在文件中並將其發送到螢幕。