printf '%s' "$list" | tr ' ' '\n' | grep -v '^linux-' | paste -sd " "
Такое поведение не имеет ничего общего с 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 вашего терминала.