Выполните команду в удаленном активном терминале

Не самое симпатичное решение, но это, кажется, работает (использование дурака 1.5.20) с идентификатором сообщения, взятым от моего ящика входящих сообщений в $MSGID:

mutt -e "macro index - 'l~i${MSGID}'; push -\n"

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

10
23.05.2012, 01:42
2 ответа

Существует названная утилита командной строки ttyecho это может отправить команду на другой терминал (tty/pts) и выполнять команду.

sudo ttyecho -n /dev/pts/5 ls

См.: утилита для отправки команд или данных к другим терминалам (tty/pts)

Также см.: ttyecho исходный код на GitHub.

Другая интересная команда tty selector, интерактивный сопоставитель в реальном времени в консоли, которая обновляет tty входной буфер.

# selector examples
selector -v -x @ <(find . -maxdepth 2 -type d | awk '{print $0"@cd "$0}')
selector -v -x @ <(grep -E -o 'http[^ ]+' fileWithURLS)

См.: селектор - ДИНАМИЧЕСКИЙ ПОИСК В КОНСОЛИ

11
27.01.2020, 20:01
  • 1
    К сожалению, ссылка на ttyecho исходный код на GitHub, кажется, повреждается. Однако это, кажется, доступно по github.com/osospeed/ttyecho вместо этого, теперь. –  Wilson F 26.06.2017, 22:49

Когда Вы выпускаете запись к /dev/pts/X (/proc/6350/fd/0, 1 и 2 просто символьная ссылка на тот), что происходит, точно то же самое, которое происходит когда процесс 6350 (или один из его детей, соответственно разветвленных), производит что-то: это пишет в терминал.

При попытке читать из того устройства (cat < /dev/pts/X), броские вещи произойдут. Необходимо видеть вещи, которые Вы вводите в исходной оболочке, обнаруживаются. (Вполне возможно только после первой новой строки Вы ввели - я предполагаю терминальную программу (xterm или независимо от того, что Вы используете), делает некоторую буферизацию строки, и 6350 оболочка, которая была заблокирована на read получает ту часть; затем любая оболочка могла бы, или нет, выиграть последующие чтения, но я мог бы очень хорошо быть абсолютно неправ в этом.)

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

Если Вы хотите ввести команды в это 6530 процесс, это должно будет сделать это через терминал (является ли это приложением X11 или чем-то еще).

Рекомендуемое чтение: Каково точное различие между 'терминалом', 'оболочкой', 'tty' и 'консолью'?

7
27.01.2020, 20:01
  • 1
    Интересно, читая из pts (cat /dev/pts/x, Вам не нужно <) Я получаю буквы, строго переменные между терминалами. –  Kevin 22.05.2012, 21:50
  • 2
    Использование перенаправления, вероятно, не изменяется очень. Я получаю непредсказуемый вывод так или иначе. –  Mat 22.05.2012, 21:52
  • 3
    Интересный, спасибо за ссылку. Так /proc/6350/fd/0 символьная ссылка на stdin родителя process 6350 который является терминалом. Я предполагаю, что это - то же для оконных приложений? –  rvlander 23.05.2012, 10:40

Теги

Похожие вопросы