jll*_*gre 315
这是一个适用于任何Unix/Linux实现的解决方案,假设它关注POSIX标准.它也适用于某些非Unix环境cygwin.
echo 'ee' | tee /dev/tty | foo
Run Code Online (Sandbox Code Playgroud)
参考: Open Group Base规范第7期IEEE Std 1003.1,2013 Edition,§10.1:
的/ dev/tty的
与该流程的流程组相关联,如果有的话.无论输出如何被重定向,它对于希望确保向终端写入消息或从终端读取数据的程序或shell过程都很有用.它还可以用于需要输出文件名称的应用程序,当需要输入类型时,找到当前正在使用的终端是很烦人的.在每个过程中,控制终端的同义词
据报道,Google Colab等一些环境在执行命令返回可用设备/dev/tty时仍未实施tty.这是一个解决方法:
tty=$(tty)
echo 'ee' | tee $tty | foo
Run Code Online (Sandbox Code Playgroud)
或者使用古老的Bourne shell:
tty=`tty`
echo 'ee' | tee $tty | foo
Run Code Online (Sandbox Code Playgroud)
bmk*_*bmk 61
另一件要尝试的是:
echo 'ee' | tee >(foo)
Run Code Online (Sandbox Code Playgroud)
这>(foo)是一个过程替代.
小智 18
在某些系统上拒绝访问"/ 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"曾经是"电传打字"终端的常用缩写,它使用了一卷黄纸并且经常使用圆形键卡住.
Jan*_*Jan 15
尝试:
$ echo 'ee' | tee /dev/stderr | foo
Run Code Online (Sandbox Code Playgroud)
当然,如果使用stderr是一个选项.
首先,您需要弄清楚与您的屏幕相关联的终端(或您希望输出显示在哪个屏幕上):
tty
Run Code Online (Sandbox Code Playgroud)
然后你可以将输出发送到该终端并通过你的foo程序管道另一个副本:
echo ee | tee /dev/pty/2 | foo
Run Code Online (Sandbox Code Playgroud)