【发布时间】:2022-01-18 16:43:27
【问题描述】:
我对 bash 有以下(简化的)情况:
输入的数据流经过 gzip 压缩。然而,有时数据会意外地被双重 gzip 压缩,所以我必须做的是 ...incoming stream... | gunzip | gunzip | ...continue process... 。但只有当我确定第一个 gunzip 的输出是另一个 gzipped 数据流时。
我最初的想法是:
echo "My plain text" | gzip | gzip | gunzip | if [ $(mimetype -b --stdin ) == 'application/gzip' ]; then zcat; else cat; fi
但这会导致第二个 gunzip (gzip: stdin: unexpected end of file) 的标准输入为空。我的怀疑是流只能被读取一次,并且mimetype 已经完成了它,因此导致 zcat 的输入为空。
可以通过以下方式检查脚本的工作情况:
echo "My plain text" | gzip | gzip | gunzip | if [ 'application/gzip' == 'text/plain' ]; then cat; else zcat; fi
运行良好。
我想知道的:
- 您只能处理一次流的假设是否正确?
- 如果不将数据保存到硬盘,有什么方法可以实现?
【问题讨论】:
-
你的怀疑是正确的。
标签: linux bash stream pipe mime-types