Unix 如何使用tee将所有输出发送到标准输出,并将灰色输出发送到文件?
我可以使用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。也许这就
./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)