当我重定向到“tty”时,它实际上在“tty”上的哪个位置,是“stdout”还是“stderr”

当我重定向到“tty”时,它实际上在“tty”上的哪个位置,是“stdout”还是“stderr”

当我执行如下命令时:

echo "Hello" > tty/pts/2

它会打印出关于该信息terminal。它是重定向到该处stdout还是stderr从该处重定向tty

答案1

大概是你的命令不正确;它会将字符串“Hello”保存到名为2ie的文件中tty/pts/2(如果中间目录存在)。

也许你的意思是:

echo "Hello" > /dev/pts/2

它将向第二个伪终端发送字符串“Hello”。

现在,终端内部运行的进程的 STDIN、STDOUT 和 STDERR 都与伪终端本身绑定,因此实际上不可能单独找出终端内部运行的进程的文件描述符。

/proc您可以通过读取在终端内运行的 shell 的文件描述符来检查,您将看到标准流实际上已符号链接到伪终端。

对于我zsh在伪终端上的运行/dev/pts/46

/proc/self/fd% tty
/dev/pts/46

/proc/self/fd% ls -l           
lrwx------ 1 foobar foobar 64 Jun 13 15:07 0 -> /dev/pts/46
lrwx------ 1 foobar foobar 64 Jun 13 15:07 1 -> /dev/pts/46
lrwx------ 1 foobar foobar 64 Jun 13 15:07 2 -> /dev/pts/46

答案2

简单的测试是重定向stdout,然后stderr执行命令,/dev/null看看会发生什么。

adminx@L455D:~$ echo "hello" > /dev/pts/22
hello
adminx@L455D:~$ echo "hello" > /dev/pts/22  > /dev/null # no output , stdout gone
adminx@L455D:~$ echo "hello" > /dev/pts/22  2> /dev/null # stderr gone, but stdout shows up
hello

因此,stdout这就是你所看到的。

答案3

都不是。stdinstdout并且stderr只有与流程绑定时才有意义。

相关内容