Shell

如何將 stdout 重定向到一個文件,並將 stdout+stderr 重定向到另一個文件?

  • May 15, 2019

我怎樣才能實現

cmd >> file1 2>&1 1>>file2

也就是說,stdoutstderr 應該重定向到一個文件(file1),並且只有 stdout(file2)應該重定向到另一個(都處於附加模式)?

問題是,當您重定向輸出時,它不再可用於下一次重定向。您可以通過管道傳遞到tee子shell 以保留第二次重定向的輸出:

( cmd | tee -a file2 ) >> file1 2>&1

或者如果您想在終端中查看輸出:

( cmd | tee -a file2 ) 2>&1 | tee -a file1

為避免將第一個的 stderr 添加teefile1,您應該將命令的 stderr 重定向到某個文件描述符(例如 3),然後再次將其添加到 stdout:

( 2>&3 cmd | tee -a file2 ) >> file1 3>&1
# or
( 2>&3 cmd | tee -a file2 ) 3>&1 | tee -a file1

(感謝@fra-san)

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