Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何使用tee将所有输出发送到标准输出,并将灰色输出发送到文件?_Unix_Logging_Grep_Tee - Fatal编程技术网

Unix 如何使用tee将所有输出发送到标准输出,并将灰色输出发送到文件?

Unix 如何使用tee将所有输出发送到标准输出,并将灰色输出发送到文件?,unix,logging,grep,tee,Unix,Logging,Grep,Tee,我可以使用tee将输出发送到标准输出和文件,如下所示: ./process.sh | tee output.log 如何将完整输出发送到标准输出,并将灰色输出发送到文件 此参数无效,因为tee需要第二个文件参数: ./process.sh | tee | grep foo > output.log 你可以试试: ./process.sh | { tee /dev/tty | grep foo > output.log; } 这不会将输出发送到标准输出,而是发送到tty。也许这就

我可以使用tee将输出发送到标准输出和文件,如下所示:

./process.sh | tee output.log
如何将完整输出发送到标准输出,并将灰色输出发送到文件

此参数无效,因为tee需要第二个文件参数:

./process.sh | tee | grep foo > output.log
你可以试试:

./process.sh | { tee /dev/tty | grep foo > output.log; }
这不会将输出发送到标准输出,而是发送到tty。也许这就足够了

或者你可以:

./process.sh | awk '/foo/{ print > "output.log"} 1'
它将
process.sh
的所有输出打印到stdout,并将与
foo
匹配的行写入该文件

此外,您还可以执行以下操作:

mkfifo fifo
./process.sh | { cat fifo & tee fifo | grep foo > output.log; }
rm fifo
这可以通过
/proc
文件系统更干净地完成:

./process.sh | { tee /proc/self/fd/6 | grep foo > output.lot; } 6>&1

除了将输出重定向到
/dev/tty
的另一个答案之外,如果您使用支持
bash
风格的进程替换的shell(和操作系统),您可以执行以下操作:

./process.sh | tee >(grep foo > output.log)