微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能将标准文件压缩到一个文件中,并将标准打印到标准中?

我想执行一个命令,让这个命令的输出在运行中得到gzip,并且回显/输出那个命令的输出

即类似的东西:

echo "hey hey,we're the monkees" | gzip --stdout > my_log.gz

除了执行这行之外,我想在标准中看到这个:

hey hey,we're the monkees

如果发现有问题,只能发送电子邮件

脚本全屏,curses风格,更新unixen表格输出(顶部)

shell – 创build附加内容的文本文件 – 使用猫

如何创build一个像$ RANDOM这样的bashvariables

基准一个Linux Bash脚本

比赛结束后grep

Bash:在模式之后插入一个文件内容到另一个文件

为什么这个sed命令匹配号码不起作用?

在bash中打开认的文本编辑器?

在Linux上找不到Java命令

echo "hey hey,we're the monkees" | tee /dev/tty | gzip --stdout > my_log.gz

正如在注释中指出的那样,在某些情况下, /dev/stdout可能比/dev/tty更好。

另一种方法(假设一个像bash或zsh的shell):

echo "hey hey,we're the monkees" | tee >(gzip --stdout > my_log.gz)

毫无疑问奇怪的>()语法基本上做到以下几点:

创建新的FIFO(通常在/tmp/ )

执行inside ()命令并将FIFO绑定到该子命令的stdin

将FIFO文件名返回到命令行。

那么,最后看到的东西就是这样的:

tee /tmp/arjhaiX4

所有gzip看到的是它的标准输入。

对于Bash,请参阅man bash了解详情。 这是在重定向部分。 对于Zsh,请参阅man zshexpn标题为“进程替代”。

据我所知,Korn Shell,经典的Bourne Shell(包括ash和破折号)以及C Shell的变体不支持这种语法。

喝一杯好茶 !

tee命令将标准输入复制到标准输出,也复制到作为参数给出的任何文件。 当你不仅需要在管道上发送一些数据,而且要保存一个副本时,这是非常有用的

由于我的下午时间很短,这里有一些光辉的说明性的ascii艺术…

+-----+ +---+ +-----+ stdin -> |cmd 1| -> stdout -> |tee| -> stdout -> |cmd 2| +-----+ +---+ +-----+ | v file

正如greyfade在另一个答案中所表明的那样,“文件”不一定是一个常规的文件,但是可以是FIFO,让你把输出输出到第三个命令中。

+-----+ +---+ +-----+ stdin -> |cmd 1| -> stdout -> |tee| -> stdout -> |cmd 2| +-----+ +---+ +-----+ | v FIFO | v +-----+ |cmd 3| +-----+

只是发布一个不涉及到磁盘的方式:

echo "hey hey,we're the monkees" | (exec 1>&3 && tee /proc/self/fd/3 | gzip --stdout > my_log.gz)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐