почему я не могу записать на стандартный ввод моего терминального устройства с другого терминала - PullRequest
0 голосов
/ 31 августа 2018

В моем менеджере рабочего стола Gnome Ubuntu открыты два терминала.

Я пытаюсь что-то записать в терминал / dev / pts / 0, используя терминал / dev / pts / 1, используя перенаправление, например:

##in pts/1
echo date > /dev/pts/0   

Но в pts / 0 просто печатается только дата, и нажатие Enter не выполняет ее. Так что я догадался, что comamnd не собирается на стандартный ввод pts / 0. Поэтому я попытался передать вывод echo date в / dev / pts / 0, что дало мне ошибку отказа в разрешении, к которой я стал root, и изменил разрешения для нее и все же я не смог заставить команду date работать в pts / 0.

Я пробую эти вещи в учебных целях. Так что я действительно запутался, как все это работает здесь и что я должен сделать, чтобы сделать это.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете сделать это, выполнив следующие команды (из / dev / pts / 1 или другого tty):

exec 1> / dev / pts / 0

для отключения

exec 1> / dev / pts / 1 # или ваш фактически оригинальный tty-адрес.

В основном вы вытесняете tty stdin.

Отредактировано для более подробной информации.

«exec» в этом случае запускает новый bash, и вы можете передать его с новым набором переменных окружения, которые обычно нельзя изменить на лету. Для более подробной информации, пожалуйста, сделайте "man exec".

«1> / dev / pts / 0» здесь мы говорим: «что бы я ни печатал на этом новом bash, запишите это другому, и это действительно будет сделано, но весь вывод будет отображаться на оригинал tty.

Удачи в изучении Linux, надеюсь, вам понравится.

0 голосов
/ 31 августа 2018

Запись на терминальное устройство просто печатает выходные данные на терминале. Если он вставит текст обратно в буфер ввода, то все, что вы напечатали на stdout, вернется к stdin, так как они оба подключены к одному терминальному устройству.

Чтобы поместить данные во входной буфер псевдотерминала, вы должны записать на его ведущее устройство. К сожалению, они не имеют четких имен в файловой системе Linux. Существует одно устройство /dev/ptmx, и главный процесс использует grantpt() для создания подчиненного устройства, связанного с ним, до появления дочернего элемента, который использует его в качестве управляющего терминала. Таким образом, в файловой системе нет ничего, что вы могли бы записать, чтобы оно передавалось во входной буфер pty.

...