Когда я выполняю такую команду, как:
echo "Hello" > tty/pts/2
Она напечатает сообщение на этом terminal
. Он перенаправлен на stdout
или stderr
из этого tty
?
Простой тест был бы перенаправлением 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
то, что Вы видите.
По-видимому, Ваша команда не является правильной;как есть это сохранит строку "Привет" в файл, названный 2
т.е. tty/pts/2
(если промежуточные каталоги будут существовать).
, Возможно, Вы имели в виду:
echo "Hello" > /dev/pts/2
, который отправит строку "Привет" на 2-й псевдотерминал.
Теперь, STDIN, STDOUT и STDERR выполнения процесса в терминале связываются с самим псевдотерминалом, таким образом, не действительно возможно выбрать дескриптор файла процесса, работающего в терминале.
можно проверить, что в /proc
, путем чтения дескриптора файла оболочка, которая работает в терминале, Вы будете видеть, что стандартные потоки на самом деле symlinked к псевдотерминалу.
Для моего 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
Ни один. stdin
, stdout
и stderr
имеют значение только при привязке с процессами.