有时我想在中间输出一个管道的内容(我们不都是这样吗?)。
我通常这样做(是的,我知道还有其他可能更好的方法):
terminal=$(tty)
echo hello world |tee $terminal|awk '{print $2, $1}'
哪些输出
hello world
world hello
这很好,在各个方面都很可爱。
除非我真的喜欢在不创建 $terminal 变量的情况下这样做。
很简单,您说,只需将管道中的“tee $terminal
”替换为“tee $(tty)
”,不需要变量?对吧?
错了。
echo hello world |tee $(tty)|awk '{print $2, $1}'
输出
world hello
换句话说,我从管道中间的输出被吞掉了。
现在我承认这绝对是第一世界的问题,但这让我很烦,我想知道为什么第二个解决方案不起作用。
有人吗?
最佳答案
如果你的系统支持,你可以直接用/dev/tty
访问当前终端:
echo hello world | tee /dev/tty | awk '{print $2, $1}'
(无论如何,该文件在 Linux 和 Mac OS X 中可用。)
tty
命令返回连接到标准输入的文件名,它不一定是终端。在您的管道中,它是与前面命令的标准输出关联的"file"。
关于bash - 使用 T 恤 : can anyone explain? 的怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16694458/