如何在显示标准输出的同时将其显示在屏幕上? (而不是输出文件)

| 我想通过管道输出程序的标准输出,同时将其保留在屏幕上。 通过一个简单的示例(
echo
此处仅用于说明目的):
$ echo \'ee\' | foo
ee
<-我想看的输出 我知道tee可以将stdout复制到文件中,但这不是我想要的。
$ echo \'ee\' | tee output.txt | foo
我试过了
$ echo \'ee\' | tee /dev/stdout | foo
,但由于将通向
/dev/stdout
的三通输出通过管道连接到
foo
而无法工作     
已邀请:
这是一个适用于任何Unix / Linux实现的解决方案,假定它遵循follow7ѭ标准。它也可以在某些非Unix环境中使用,例如ѭ8works。
echo \'ee\' | tee /dev/tty | foo
参考:Open Group基本规范第7期 IEEE Std 1003.1,2013 Edition,§10.1:   / dev / tty      与该流程的流程组相关联(如果有)。它是   对于希望确定的程序或shell过程很有用   无论如何,向终端写入消息或从终端读取数据   输出已重定向。它也可以用于那些   当需要键入输出时,要求输出文件名   找出当前正在使用的终端很累。在每个过程中,控制终端的同义词 据报道,某些环境(例如Google Colab)在执行
tty
命令返回可用设备的同时仍未实现
/dev/tty
。这是一种解决方法:
tty=$(tty)
echo \'ee\' | tee $tty | foo
或带有古老的伯恩贝壳:
tty=`tty`
echo \'ee\' | tee $tty | foo
    
可以尝试的另一件事是:
echo \'ee\' | tee >(foo)
ѭ15是过程的替代。     
在某些系统上,拒绝访问\“ / dev / stdout \”,但是通过\“ / dev / tty \”授予对用户终端的访问。 将\“ wc \”用作\“ foo \”,以上示例可以正常运行(在linux,OSX等上):   
% echo \'Hi\' | tee /dev/tty | wc 
  Hi
      1       1       3
为了在匹配文件列表的底部添加一个计数,我使用了类似的方法:
% ls [A-J]* | tee /dev/tty | wc -l
为了避免记住所有这些,我定义别名:
% alias t tee /dev/tty
% alias wcl wc -l
这样我可以简单地说:
% ls [A-J]* | t | wcl
  POSTSCRIPT:对于较年轻的乐队,他们可能会以“ titty”作为发音,我可能会补充说“ tty”曾经很常见   “ teletype \”终端的缩写,使用一卷黄色   纸并且有经常卡住的圆形钥匙。     
尝试:
$ echo \'ee\' | tee /dev/stderr | foo
当然,如果使用stderr是一种选择。     
首先,您需要确定与屏幕(或要在其上显示输出的任何屏幕)关联的终端:
tty
然后您可以将输出发送到该终端,并通过foo程序通过管道传递其他副本:
echo ee | tee /dev/pty/2 | foo
    

要回复问题请先登录注册