Linux

使用 tee 將 STDERR 和 STDOUT 擷取到文件

  • April 27, 2021

STDERR我不清楚STDOUT使用tee. 我知道,如果我想通過管道傳輸到文件,我必須在重定向後映射文件句柄,即

find . >/tmp/output.txt 2>&1

這指示外殼發送STDOUT/tmp/output.txt,然後發送STDERRSTDOUT(現在正在發送到/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

引用自:https://serverfault.com/questions/201061