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" 写入标准输出。
命令:
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" 写入标准输出。