我想要执行一个命令,让该命令的输出在运行中得到gzip,并且回显/输出该命令的输出。如何将gzip标准加入到文件中,并将标准打印到标准中?
即是这样的:
echo "hey hey, we're the monkees" | gzip --stdout > my_log.gz
除行执行的时候,我希望看到这个标准出来:
hey hey, we're the monkees
我想要执行一个命令,让该命令的输出在运行中得到gzip,并且回显/输出该命令的输出。如何将gzip标准加入到文件中,并将标准打印到标准中?
即是这样的:
echo "hey hey, we're the monkees" | gzip --stdout > my_log.gz
除行执行的时候,我希望看到这个标准出来:
hey hey, we're the monkees
echo "hey hey, we're the monkees" | tee /dev/tty | gzip --stdout > my_log.gz
正如在评论中指出,/dev/stdout
威力在某些情况下比/dev/tty
工作更好。
祝你有个不错的杯子tee!
tee命令拷贝标准输入 到标准输出并且也作为参数给出任何 文件。这是 有用的,当你想不只是送 某些数据中,一个管道,还要 保存副本
正如我有一个缓慢的下午,这里的有些夸张说明ASCII艺术...
+-----+ +---+ +-----+
stdin -> |cmd 1| -> stdout -> |tee| -> stdout -> |cmd 2|
+-----+ +---+ +-----+
|
v
file
由于greyfade在另一个答案体现了“文件”不一定是一个普通的文件,但可能是FIFO让你管那个tee'd输出到第三命令。
+-----+ +---+ +-----+
stdin -> |cmd 1| -> stdout -> |tee| -> stdout -> |cmd 2|
+-----+ +---+ +-----+
|
v
FIFO
|
v
+-----+
|cmd 3|
+-----+
另一种方法(假设像bash
或zsh
壳):
echo "hey hey, we're the monkees" | tee >(gzip --stdout > my_log.gz)
诚然奇怪>()
语法基本上具有下列功能:
/tmp/
)()
和b中执行命令将FIFO指定给该子命令上的stdin什么tee
最终看到的话,是这样的:
tee /tmp/arjhaiX4
所有gzip
看到的是它的标准输入。
对于Bash,详见man bash
。它在redirection的部分。对于Zsh,请参阅man zshexpn
,标题为“过程替代”。据我所知,Korn Shell,经典的Bourne Shell(包括灰和破折号)和C Shell的变体不支持这种语法。
刚刚发布的方式,不涉及接触磁盘:
echo "hey hey, we're the monkees" | (exec 1>&3 && tee /proc/self/fd/3 | gzip --stdout > my_log.gz)
_A_w_e_s_o_m_e_。谢谢。 – 2009-02-20 19:54:29
在那里做什么/ dev/tty?原始问题需要标准输出的输出,而不是终端上的输出。 – 2009-02-20 20:29:46
/dev/tty是当前终端的同义词。提问者以习惯的方式使用“标准输出”来表示当前的终端,而不是对该术语的更严格的定义。 – 2009-02-20 20:41:57