是否有可能在bash中完成通过gzip优雅地管理命令?

时间:2017-08-15 06:17:30

标签: bash gzip

我有启动脚本,它调用产生大量输出的命令。为了保留空间我压缩了它的输出:

#!/bin/bash

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

可悲的是,当我按 Ctrl + C 时,gzip突然停止,压缩日志被破坏。有没有办法优雅地完成命令以获得有效的gz?

2 个答案:

答案 0 :(得分: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  

答案 1 :(得分:0)

在您的示例中,您无法安全地破坏它,因为 Ctrl + C 将终止STDOUT并且压缩无法成功完成。 如果STDOUT无关紧要,请尝试使用

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