Linux перенаправить ввод через proc fd0, dev/pts

В Ubuntu 13.04 с использованием VMware у меня есть два терминала (PID 1000 - /dev/pts0, PID 2000 - /dev/pts2) Если я сделаю это с терминала 2(/dev/pts2) ...

echo 'ls -al' > /proc/1000/fd/0

Я вижу, что 'ls -al' запрашивает вывод в терминале 0(/dev/pts0), однако это всего лишь визуальный результат, а не ввод реальной команды для терминала 0.

Я хочу перенаправить фактический ввод команды с терминала 2 на терминал 0 через /proc/pid(терминал 0)/fd/0 и выполнить команду с терминала 0.

Это возможно??, если это так, как я могу это сделать?

заранее спасибо.

2 ответа

Это невозможно, потому что bash делает две вещи, когда происходит событие клавиатуры <ENTER> случается.

  1. Печать новой строки.
  2. Выполнение введенной команды, если команда выполнена.

Логика, когда команда выполнена, не проста. Это зависит от условных выражений, обратной косой черты и т. Д.

Перенаправление символа '\n' на стандартный ввод выполнит только первый шаг. Я предполагаю, что это невозможно по замыслу, потому что оболочка, которой может управлять другая оболочка, ужасна для каждого инженера по безопасности.

В многопользовательском Linux вы сможете писать и выполнять команды для оболочек, которые запускаются разными пользователями (например, root). Вы можете делать неприятные вещи (например, обвинять других пользователей в совершении запрещенных действий).

Если вам все еще нужно решение:

Вы можете написать скрипт, который читает команды из канала и выполняет их под другим пользователем, но будьте осторожны: это небезопасно.

Существует разница между терминалом и оболочкой. Когда вы видите окно pts, там работают и эмулятор терминала (pts), и оболочка (bash). Bash читает строки с устройства pts и выполняет команды. Bash записывает свой stdout / stderr обратно в устройство pts, и программы, запускаемые bash, тоже делают это. Но сам оч это просто прославленный последовательный терминал. Он отображает символы, написанные на нем, и вы (bash) можете читать символы, напечатанные на нем. Обычно это также отражает (отображает) набранные символы.

Когда вы записываете в устройство pts с другого терминала, оно отображает символы, но эти символы не могут быть прочитаны с устройства pts. Вы (bash) можете только читать с очков то, что печатает пользователь.

Смущает то, что отображение символов, записанных на устройстве pts (это то, что вы пробовали), и отображение напечатанных символов выглядят одинаково.

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