Bash中的命令替换为tty

时间:2015-08-30 08:20:49

标签: bash tty command-substitution

命令:

echo "a" | tee `tty`

输出:

a

命令:

echo "a" | tee /dev/pts/0

输出:

a
a

与当前终端连接的文件是/dev/pts/0。 两个命令都不应该产生相同的输出吗?我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

tee将stdin复制到命令行给出的所有文件描述符到stdout,所以如果其中一个文件是当前终端(你也可以使用- )然后输入将在stdout上写两次。

在第一种情况下,stdin没有连接到tty(而是连接到echo命令的输出),因此tty给出了not a tty。因此命令变为echo "a" | tee not a tty,你将有三个文件(称为“not”“a”和“tty”),每个文件包含“a”,以及写入stdout的“a”。