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

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

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

| 我想通过管道输出程序的标准输出,同时将其保留在屏幕上。 通过一个简单的示例(
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
    

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