我可以使用tee将输出发送到stdout和文件,如下所示:
./process.sh | tee output.log
如何将完整输出发送到stdout并将grepped输出发送到文件?
这个不起作用,因为tee期望第二个文件参数:
./process.sh | tee | grep foo > output.log
答案 0 :(得分:5)
你可以尝试:
./process.sh | { tee /dev/tty | grep foo > output.log; }
这不会将输出发送到stdout,而是发送到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
答案 1 :(得分:2)
除了将输出重定向到/dev/tty
的另一个答案之外,如果使用支持bash
样式进程替换的shell(和操作系统),则可以执行以下操作:
./process.sh | tee >(grep foo > output.log)