Печатать сообщение до того, как Bash приостановит вывод

printf '%s' "$list" | tr ' ' '\n' | grep -v '^linux-' | paste -sd " "
0
06.10.2020, 12:23
1 ответ

Такое поведение не имеет ничего общего с bash (или любой другой оболочкой, если это имеет значение ). Это драйвер терминального устройства, который приостанавливает вывод (и прекращает отправку данных на терминал ), когда он получает от терминала символ ^S(или что-то еще, установленное stty stop).

Приложения, запущенные вашей оболочкой в ​​этом терминале, не увидят этот символ ^S, даже если они будут читать с терминального устройства.

Оболочка — это просто еще одно приложение, которое запускается в терминале и чья задача состоит только в интерпретации командных строк и запуске соответствующей команды в отдельных процессах. Пока команды выполняются, оболочка ничего не делает, она просто ждет их завершения, чтобы предложить вам ввести другую команду.

Фактически, современные оболочки, включая bash, отключают этот процесс управления потоком, когда они(их редактор командной строки )взаимодействуют с терминальным устройством. Вы заметите, что когда вы нажимаете Ctrl+S в командной строке bash и предполагаете, что он находится в режиме emacs, bashобрабатывает его как вызов виджета инкрементного поиска.

Здесь для сообщения, которое будет выдаваться при нажатии Ctrl+S , вам потребуется изменить линейную дисциплину )драйвера терминального устройства (.Немного глупо посылать что-то в ответ терминалу, посылающему «Пожалуйста, прекратите отправку» .

Другой подход может состоять в том, чтобы обернуть ваш сеанс оболочки в некую псевдо-терминальную оболочку, которая переводит хост-терминальное устройство в необработанный режим и предлагает bashсвое собственное псевдо-терминальное устройство. перехватывает эти символы ^Sдля записи сообщения.

Это можно сделать, например, с помощью экрана GNU, который представляет собой эмулятор терминала внутри терминала.

Добавить в~/.screenrc:

bindkey "\023" eval 'hstatus "Stopped - press Ctrl+Q to proceed"' xoff
bindkey "\021" eval "hstatus screen" xon

Здесь с сообщением, выданным в строке hardstatus вашего терминала.

1
18.03.2021, 22:59

Теги

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