我可以使用tee命令将输出同时发送到标准输出和文件,如下所示:
./process.sh | tee output.log
我该如何将完整的输出发送到标准输出,将grep筛选后的输出发送到文件中?
这个方法行不通,因为tee需要第二个文件参数:
./process.sh | tee | grep foo > output.log
./process.sh | { tee /dev/tty | grep foo > output.log; }
这不会将输出发送到标准输出(stdout),而是发送到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
风格进程替换的shell(和操作系统),您可以这样做:
./process.sh | tee >(grep foo > output.log)