8

tee 从标准输入读取并写入标准输出和文件。

some_command |& tee log

tee 可以写入压缩文件吗?

some_command |& tee -some_option log.bz2

如果 tee 不能这样做,还有其他命令吗?

我可以将输出重定向到压缩文件

some_command |& bzip2 > log.bz2

但是使用此命令,标准输出的输出将丢失。

4

2 回答 2

14

如果你的 shell 是bash(4.x 版),你有'process substitution',你可以使用:

some_command 2>&1 | tee >(bzip2 -c > log.bz2)

这会将标准错误和标准输出重定向到tee(就像|&那样,但我更喜欢经典表示法)。的输出副本tee被发送到进程而不是文件;该过程bzip2 -c > log.bz2将其标准输入以压缩格式写入其标准输出。当然,输出的另一个(未压缩)副本直接进入标准输出。

于 2013-03-28T05:34:04.230 回答
6

如果您可以在 stderr 上输出输出,则可以重定向它:

some_command | tee /dev/stderr | bzip2 > log.bz2

这会将输出发送到 stdout 和 stderr ( | tee /dev/stderr)。然后它将标准输出通过管道传输到 bzip2 ( | bzip2 > log.bz2)

于 2013-03-28T02:50:53.937 回答