【发布时间】:2015-08-30 16:38:56
【问题描述】:
命令:
echo "a" | tee `tty`
输出:
a
命令:
echo "a" | tee /dev/pts/0
输出:
a
a
与当前终端连接的文件是/dev/pts/0。
两个命令不应该产生相同的输出吗?我在这里错过了什么?
【问题讨论】:
标签: bash tty command-substitution
命令:
echo "a" | tee `tty`
输出:
a
命令:
echo "a" | tee /dev/pts/0
输出:
a
a
与当前终端连接的文件是/dev/pts/0。
两个命令不应该产生相同的输出吗?我在这里错过了什么?
【问题讨论】:
标签: bash tty command-substitution
tee 将标准输入复制到命令行上给出的所有文件描述符和复制到标准输出,因此如果其中一个文件是当前终端(您也可以使用-),那么输入将在标准输出上写两次。
在第一种情况下,stdin 没有连接到 tty(而是连接到echo 命令的输出),所以tty 给出了not a tty。因此命令变为echo "a" | tee not a tty,您将拥有三个文件(称为“not”、“a”和“tty”),每个文件都包含“a”,以及写入标准输出的“a”。
【讨论】: