Bash 中的命令替换为 tty

Command Substitution in Bash for tty

命令:

echo "a" | tee `tty`

输出:

a

命令:

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

输出:

a
a

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

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

在第一种情况下,stdin 未连接到 tty(但连接到 echo 命令的输出),因此 tty 给出 not a tty。因此命令变为 echo "a" | tee not a tty,您将拥有三个文件(名为 "not" "a" 和 "tty"),每个文件包含 "a",以及 "a" 写入标准输出。