2017-08-15 18 views

回答

2

我无法重现你的问题,用“是”为你的程序的替代品 - 即

yes 2>&1 | tee >(gzip --stdout > "1.log.gz") 

创造完美每次都有效的gz文件,所以想知道是否有其他的事情发生。

但是,您可以使用命名管道隔离命令的两个部分,如下所示;

# create a named pipe 
mknod mypipe p 

# start a background job that reads from the pipe 
gzip --stdout > "1.log.gz" <mypipe & 

# now do work -- ctrl-c only affect this process 
my_command 2>&1 | tee mypipe 
+0

事实上,我也无法用“是”来重现问题。也许是因为这个命令应该设置信号?如果用循环中打印'y'的shell脚本替换'yes',则会重现问题。尽管如此,使用FIFO管道的窍门有用,谢谢。 –

1

在你的榜样,你不能打破它安全,因为按Ctrl +çSTDOUT和压缩不能成功完成。 如果STDOUT不事尝试使用

my_command &>/dev/null | tee >(gzip > "1.log.gz")

+0

如果您将STDOUT和STDERR都重定向到/ dev/null,那么tee会读什么?而STDOUT确实很重要,我只是想将它压缩。 –

相关问题