5

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

./process.sh | tee output.log

如何将完整的输出发送到标准输出并将 grepped 输出发送到文件?

这个不起作用,因为 tee 需要第二个文件参数:

./process.sh | tee | grep foo > output.log
4

2 回答 2

5

你可以试试:

./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
于 2013-02-08T18:25:21.497 回答
3

除了将输出重定向到的另一个答案之外/dev/tty,如果您使用支持bash-style 进程替换的外壳(和操作系统),您可以这样做:

./process.sh | tee >(grep foo > output.log)
于 2013-02-08T18:29:29.100 回答