Предположим, у вас открыт эмулятор терминала (T1) с PID 6350.
С другого терминала введите эту команду (C1):
echo "ls\n" > /proc/6350/fd/0
Это пишет ls
и новую строку в T1, но не выполняет его. Почему?
Я также пытался использовать cat|bash
с, echo "ls\n" > /proc/catid/fd/0
но он все еще не выполняется.
Как я могу передать команду в другой терминал и выполнить команду?
вариант ответа :
$ mkfifo toto;
$ bash < toto;
$ echo "ls" > toto;
В этом случае вы больше не можете писать напрямую в терминал (все отображается так же, как команда (C1) отображает информацию в этом терминале).
terminal
stdout
command
file-descriptors
rvlander
источник
источник
Ответы:
Существует служебная программа командной строки,
ttyecho
которая может отправить команду на другой терминал (tty / pts) и выполнить команду.См .: Утилита для отправки команд или данных на другие терминалы (tty / pts)
Также смотрите:
ttyecho
исходный код на github .Еще одна интересная команда tty -
selector
интерактивное средство сравнения шаблонов в реальном времени на консоли, которое обновляет буфер ввода tty.Смотрите: селектор - ДИНАМИЧЕСКИЙ ПОИСК В КОНСОЛИ
источник
ttyecho
исходный код на github, кажется, не работает. Тем не менее , теперь он доступен по адресу github.com/osospeed/ttyecho .Когда вы выдаете записи в
/dev/pts/X
(/proc/6350/fd/0
,1
и2
это просто символическая к этому), что происходит в точности то же самое , что происходит , когда процесс6350
(или один из его детей, соответственно раздвоенный) Выходы что - то: он пишет терминал.Если вы попытаетесь прочитать с этого устройства (
cat < /dev/pts/X
), произойдет что-то интересное. Вы должны увидеть вещи, которые вы вводите в оригинальной оболочке. (Вполне возможно, только после того, как вы набрали первую новую строку - я предполагаю, что терминальная программа (xterm
или все, что вы используете) выполняет некоторую буферизацию строки, и6350
оболочка, которая была заблокирована,read
получает этот кусок; тогда либо оболочка может, либо может нет, выиграйте последующие чтения, но я вполне могу ошибаться.)Дело в том, что когда вы читаете или пишете на это устройство, вы не разговариваете с другой оболочкой, которая его использует. Вы говорите с эмулятором терминала (
xterm
например). Только эмулятор терминала может вводить данные в этот канал (что читает оболочка), и все, что пишет оболочка, отправляется в терминал. Присоединение второй оболочки не меняет этого.Если вы хотите ввести команды в этот
6530
процесс, он должен будет сделать это через терминал (будь то приложение X11 или что-то еще).Рекомендуемое прочтение: какова точная разница между терминалом, оболочкой, tty и консолью?
источник
cat /dev/pts/x
вам это не нужно<
) я получаю буквы, строго чередующиеся между терминалами./proc/6350/fd/0
же как и ссылка на родителя стандартного ввода,process 6350
терминалом которого является. Я думаю, это то же самое для оконных приложений?