Команды, пропускающие символы к bash

Предыдущие ответы неполные, я считаю. Что :detach делает, так это закрывает вьюпорты, которые отображают активность tmux. Однако сам tmux все еще работает в фоновом режиме, как вы можете видеть, выполнив ps:

myuser 1799 0.0 0.0 2500052 4632 ?? Ss 21Feb16 0:48.39 tmux new-session -s Dev

На самом деле, даже если вы выйдете из терминала и запустите его снова, все процессы tmux все равно будут работать в фоновом режиме.

Чтобы убить сам процесс tmux, нужно сделать:

tmux kill-session [-t session_name]

или просто:

kill -9 1799

0
06.02.2019, 17:56
1 ответ

Это , а не "случайные символы".

% printf '\e[51;117R' | console-decode-ecma48
CPR 51;117
%

Во время процесса регистрации -для удаленной системы выполняется что-то вроде отправки управляющей последовательности отчета о состоянии устройства на ее терминал и запроса отчета о положении курсора с этого терминала. Терминал (вашего терминала, находящегося на расстоянии нескольких переходов, передал вывод DSR через ssh, аexpect)должным образом генерирует и отправляет его.

% printf '\x1b[6n' ; console-decode-ecma48
^[[30;1R
CPR 30;1
LF
%

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

Такие вещи являются одной из причин того, что обработка входных данных терминала действительно всегда должна быть надлежащим декодером ECMA -48 с надлежащим конечным автоматом. Система редактирования строк в вашей оболочке - нет. (Ни ZLE, ни Readline, ни libedit не обрабатывают последовательности управления вводом терминала должным образом. )Это декодирование с использованием сопоставления с образцом, что не дает правильных результатов. Обратите внимание, что он проигнорировал только первые четыре символа управляющей последовательности. Надлежащий входной декодер ECMA -48 будет декодировать всю управляющую последовательность, включая все символы параметра до конечного символа, распознавать ее как CPR и (надеяться )бросить его как ввод, для которого он не используется.

Что касается того, что в первую очередь запрашивает CPR. :Для этого вам нужно проверить удаленную систему и какие программы она запускает в журнале терминала -. Вероятным виновником является программа Xterm resize.(Обратите внимание, что вы не должны использовать эту программу, если Xterm не является вашим терминалом, так как она неправильно установит для переменной среды TERMтип xterm. )Но resizeне единственная возможность.

Дополнительная литература

  • Джонатан де Бойн Поллард (2018 ). «console-decode-ecma48». Направляющая ноша . Программное обеспечение.
  • Джонатан де Бойн Поллард (2019 ). «TERM». Направляющая ноша . Программное обеспечение.
  • https://unix.stackexchange.com/a/444270/5132
4
28.01.2020, 02:18

Теги

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