Когда я перенаправляю на «tty», где он на самом деле идет на «tty», это «stdout» или «stderr»

Когда я выполняю такую ​​команду, как:

echo "Hello" > tty/pts/2

Она напечатает сообщение на этом terminal. Он перенаправлен на stdout или stderr из этого tty?

0
задан 14 June 2016 в 03:27

3 ответа

Простой тест был бы перенаправлением 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 то, что Вы видите.

0
ответ дан 14 June 2016 в 03:27

По-видимому, Ваша команда не является правильной;как есть это сохранит строку "Привет" в файл, названный 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
0
ответ дан 14 June 2016 в 03:27

Ни один. stdin, stdout и stderr имеют значение только при привязке с процессами.

0
ответ дан 14 June 2016 в 03:27

Другие вопросы по тегам:

Похожие вопросы: