Bash

如何將 stderr 和 stdout 重定向到不同的文件並在終端中顯示?

  • January 10, 2018

我想在終端中查看命令的輸出,就好像沒有重定向一樣。此外,stderr 需要重定向到 err.log,stdout 需要重定向到 stdout.log。

最好在一個單獨的文件 stdouterr.log 中也有終端中顯示的內容的精確副本,即錯誤發生時列印的錯誤。

使用tee命令如下:

(cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log

3>&1 1>&2 2>&3是你如何交換標準錯誤和標準輸出,因為 tee 只能接受標準輸出。

查看Unix tee 命令,了解使用tee.

我認為將 stdout 和 stderr 記錄到兩個不同的文件是一個絕妙的主意。它不會使日誌非同步嗎?所以我嘗試了以下方法:

  • 標準輸出到“stdout.log”(如 dogbane 建議的那樣)
  • stderror 到“stderr.log”(如 dogbane 建議的那樣)
  • 所有輸出到“all.log”和
  • 仍然能夠在顯示器上看到輸出(儘管在單獨的終端中!)

((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log

在另一個終端

tail -f --sleep-interval=2 all.log

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