bash - 使用 T 恤 : can anyone explain? 的怪异

标签 bash tee

有时我想在中间输出一个管道的内容(我们不都是这样吗?)。

我通常这样做(是的,我知道还有其他可能更好的方法):

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/

相关文章:

linux - 在 bash 脚本中分配 "at"命令的输出

java - 如何编写 shell 脚本来获取给定的进程空闲时间?

php - 将 PHP 回显到文件 linux

linux - 对存储在目录中的文件执行正则表达式

linux - 递归删除文件夹中的所有二进制文件

linux - Bash 脚本输出到控制台和文件

linux - 记录文件名 tee 写入

linux - 如何将中间结果从管道打印到屏幕?

bash - awk 提示命令中来自连接字符串的非终止字符串

python - itertools.tee() 的结果是线程安全的(Python)