我可以使用 tee 将输出发送到标准输出和文件,如下所示:
./process.sh | tee output.log
如何将完整的输出发送到标准输出并将 grepped 输出发送到文件?
这个不起作用,因为 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
到标准输出,并将匹配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
-style 进程替换的外壳(和操作系统),您可以这样做:
./process.sh | tee >(grep foo > output.log)