我想管道程序的标准输出,同时保持在屏幕上 .
举个简单的例子(这里使用的 echo 仅用于说明目的):
echo
$ echo 'ee' | fooee < - 我希望看到的输出
$ echo 'ee' | foo
ee
我知道tee可以将stdout复制到文件中,但这不是我想要的 .$ echo 'ee' | tee output.txt | foo
$ echo 'ee' | tee output.txt | foo
我试过了$ echo 'ee' | tee /dev/stdout | foo 但它不起作用,因为tee输出到 /dev/stdout 被传送到 foo
$ echo 'ee' | tee /dev/stdout | foo
/dev/stdout
foo
另一件要尝试的是:
echo 'ee' | tee >(foo)
>(foo) 是process substitution .
>(foo)
尝试:
$ echo 'ee' | tee /dev/stderr | foo
当然,如果使用stderr是一个选项 .
在某些系统上拒绝访问“/ dev / stdout”,但是“/ dev / tty”给出了对用户终端的访问权限 . 使用“wc”表示“foo”,上面的例子可以正常工作(在linux,OSX等上):
%echo'嗨'| tee / dev / tty | wc嗨1 1 3
要在匹配文件列表的底部添加计数,我使用如下内容:% ls [A-J]* | tee /dev/tty | wc -l
% ls [A-J]* | tee /dev/tty | wc -l
为了避免记住这一切,我定义了别名:% alias t tee /dev/tty% alias wcl wc -l
% alias t tee /dev/tty
% alias wcl wc -l
所以我可以简单地说:% ls [A-J]* | t | wcl
% ls [A-J]* | t | wcl
POSTSCRIPT:对于年轻人,可能会将其发音称为“titty”,我可能会补充说“tty”曾经是“电传打字”终端的常用缩写,它使用了一卷黄纸并且有圆形键,经常卡住 .
首先,您需要弄清楚与您的屏幕相关联的终端(或您希望输出显示在哪个屏幕上):
tty
然后你可以将输出发送到该终端并通过你的foo程序管道另一个副本:
echo ee | tee /dev/pty/2 | foo
这是一个适用于任何Unix / Linux实现的解决方案,假设它关注遵循 POSIX 标准 . 它适用于某些非Unix环境,如 cygwin .
POSIX
cygwin
echo 'ee' | tee /dev/tty | foo
参考:The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition, §10.1:
/ dev / tty与该进程的进程组相关联,如果有的话 . 对于希望确保向终端写入消息或从终端读取数据的程序或shell程序,无论输出如何被重定向,它都是有用的 . 它还可以用于需要输出文件名称的应用程序,当需要输入类型时,找出当前正在使用的终端是很烦人的 . 在每个过程中,控制终端的同义词
5 回答
另一件要尝试的是:
>(foo)
是process substitution .尝试:
当然,如果使用stderr是一个选项 .
在某些系统上拒绝访问“/ dev / stdout”,但是“/ dev / tty”给出了对用户终端的访问权限 . 使用“wc”表示“foo”,上面的例子可以正常工作(在linux,OSX等上):
要在匹配文件列表的底部添加计数,我使用如下内容:
% ls [A-J]* | tee /dev/tty | wc -l
为了避免记住这一切,我定义了别名:
% alias t tee /dev/tty
% alias wcl wc -l
所以我可以简单地说:
% ls [A-J]* | t | wcl
首先,您需要弄清楚与您的屏幕相关联的终端(或您希望输出显示在哪个屏幕上):
然后你可以将输出发送到该终端并通过你的foo程序管道另一个副本:
这是一个适用于任何Unix / Linux实现的解决方案,假设它关注遵循
POSIX
标准 . 它适用于某些非Unix环境,如cygwin
.参考:The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition, §10.1: