#linux #shell #proc #pts
#linux #оболочка #proc #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 (terminal 0’s)/ fd/0 и выполнить команду с терминала 0.
Возможно ли это ??, если да, то как я могу это сделать?
заранее благодарю вас.
Ответ №1:
Это невозможно, потому что bash выполняет две вещи, когда <ENTER>
происходит событие клавиатуры.
- Печать новой строки.
- Выполнение введенной команды, если команда завершена.
Логика, когда команда завершена, не проста. Это зависит от условных выражений, обратной косой черты и т. Д.
Перенаправление символа ‘ n’ на стандартный интерфейс будет выполнять только первый шаг. Я думаю, это невозможно по замыслу, потому что оболочка, которая может управляться другой оболочкой, ужасна для каждого инженера по безопасности.
В многопользовательском linux вы сможете писать и выполнять команды в оболочках, которые выполняются разными пользователями (например, root). Вы можете делать неприятные вещи (например, обвинять других пользователей в совершении запрещенных действий).
Если вам все еще нужно решение:
Вы могли бы написать скрипт, который считывает команды из канала и выполняет их под другим пользователем, но будьте осторожны: это небезопасно.
Ответ №2:
Существует разница между терминалом и оболочкой. Когда вы видите окно pts, там работают как эмулятор терминала (pts), так и оболочка (bash). Bash считывает строки с устройства pts и выполняет команды. Bash записывает свой стандартный вывод / stderr обратно в устройство pts, и программы, запущенные bash, делают то же самое. Но сам pts — это просто прославленный последовательный терминал. Он отображает символы, записанные в нем, и вы (bash) можете читать введенные в него символы. Обычно он также отображает (отображает) введенные символы.
Когда вы записываете в устройство pts с другого терминала, оно отображает символы, но эти символы не могут быть прочитаны с устройства pts. Вы (bash) можете читать из pts только то, что вводит пользователь.
Сбивает с толку то, что отображение символов, записанных в устройство pts (это то, что вы пробовали), и повторение введенных символов выглядят точно так же.