我想执行一个命令,让该命令的输出得到 gzip'd 的运行,并回显/发送该命令的输出。
例如:
echo "hey hey, we're the monkees" | gzip --stdout > my_log.gz
除了行执行时,我想在标准输出上看到这个:
hey hey, we're the monkees
最佳答案
另一种方式(假设像 bash
或 zsh
这样的 shell):
echo "hey hey, we're the monkees" | tee >(gzip --stdout > my_log.gz)
公认的奇怪的 >()
语法基本上执行以下操作:
- 创建新的 FIFO(通常在
/tmp/
中) - 在
()
中执行命令并将 FIFO 绑定(bind)到该子命令上的标准输入 - 将 FIFO 文件名返回到命令行。
tee
最终看到的内容类似于:
tee /tmp/arjhaiX4
gzip
看到的都是它的标准输入。
对于 Bash,请参阅 man bash
详情。它在 redirection 的部分中.对于 Zsh,请参阅 man zshexpn
在“进程替换”标题下。
据我所知,Korn Shell、经典 Bourne Shell 的变体(包括 ash 和 dash)以及 C Shell 不支持这种语法。
关于linux - 如何将标准压缩到文件中并将标准打印到标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570984/