Linux
使用 tee 將 STDERR 和 STDOUT 擷取到文件
STDERR
我不清楚STDOUT
使用tee
. 我知道,如果我想通過管道傳輸到文件,我必須在重定向後映射文件句柄,即find . >/tmp/output.txt 2>&1
這指示外殼發送
STDOUT
到/tmp/output.txt
,然後發送STDERR
到STDOUT
(現在正在發送到/tmp/output.txt
)。嘗試
2>&1
在重定向文件之前執行將不會產生預期的效果。但是,當我想使用管道時,
tee
應該是:find . |tee /tmp/output.txt 2>&1 # or find . 2>&1 |tee /tmp/output.txt # ?
後者; 它確保原始命令的 STDOUT 和 STDERR 進入同一個 fd,然後將它們共同饋送到 tee。在前一種情況下,它是 tee 命令的 STDERR,您將與它的 STDOUT 一起加入。
它似乎與https://stackoverflow.com/questions/363223/how-do-i-get-both-stdout-and-stderr-to-go-to-the-terminal-and-a-log-file重複/65738448#65738448
我也會在腳本中為 bash 發布我的答案:
#!/bin/bash exec 1> >(tee x.log) 2> >(tee x.err >&2) echo "test for log" echo "test for err" 1>&2