2015-07-15 1 views
1

Когда я запустил cat -, скажите /dev/pts/2 и попробуйте написать его ввод от другого tty с помощью echo foo > /dev/pts/2 или echo foo > /proc/(pid of cat)/fd/0 он просто печатает foo в pts/2, кошка не повторяет его. Зачем? Как отправить ввод коте из другого tty, чтобы он также повторил его?Как перенаправить ввод с другого tty?

+0

У вас есть необходимость сделать это именно так? Кажется, что он может работать. Вот пример [mkfifo] (http://www.linuxjournal.com/article/2156). –

+0

@MicahElliott Я знаю, что использование fifo будет работать, но просто хочу знать, почему прямое отправление на его stdin не работает. – shanky061

+0

Он работает, если вход представляет собой трубку, например, запустить 'cat | tr a-z A-Z' в одном терминале; затем 'echo aBc>/proc//fd/0' в другом терминале. – jfs

ответ

0

Я думаю, что здесь существует фундаментальное недоразумение: не может вводить содержимое в другой поток TTY (если только у вас нет хозяина).

Вы можете, однако, позвонить cat /dev/pts/0, чтобы читать из потока входных данных TTY, но будьте осторожны, что вы будете бороться с любым процессом, который уже существует.

+0

Я пробовал с правами root, которые также не работают. – shanky061

+0

также '/ dev/pts/2' - это файл, поэтому, когда мы что-то пишем, программа, читающая его, должна прочитать это. – shanky061

+0

@ shanky061 Конечно, программа, прочитанная с * master * end, прочитает ее. Так же, как когда мастер пишет, раб может читать. – o11c

1

У каждого терминала есть файл для него, в/dev/pts /.

$ пс

, чтобы определить, какой терминал вы находитесь. Пример: Я на клемме 3

PID TTY TIME CMD

1477 PTS/3 пс 00:00:00

26511 очки/3 00:00:01 Баш

Чем просто перенаправить ваш выход на этот терминал.

кошка F>/DEV/очки/3

Сделать первый в первой из трубы на втором терминале, то один вы хотите, чтобы отобразить текст на

mkfifo --mode=600 /tmp/pipe 

Перенаправление команды к этой трубе на первом терминале

cat foo > /tmp/pipe 

+0

cat не повторяет данные, полученные от другого tty, используя ваш метод, также не дает мне решения fifo. – shanky061

+1

Или запустите 'tty', чтобы увидеть собственное имя TTY. – o11c

+0

Жаль, что это не помогло. Удачи тебе! @ o11c Я этого не знал. Замечательно! –

Смежные вопросы