2017-08-15 22 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確實很重要,我只是想將它壓縮。 –

相關問題