VREPRINT, похоже, не оказывает никакого эффекта

VREPRINT, похоже, не оказывает никакого эффекта

СогласноДокументация GNU, есть персонажVREPRINT, или rprnt, который должен повторно печатать буфер ввода редактора строк оболочки. Это может быть полезно, если что-то вроде фонового процесса записало в PTY, пока вы печатаете другую команду, и есть вывод, перемежающийся с вашим вводом. Однако я попробовал использовать его на самом деле, и, похоже, это не дало никакого эффекта. Я сделал следующее:

  1. Запустите shсеанс на последнем alpineобразе из Dockerhub.
  2. Используйте sttyдля привязки rprntперсонажа к ^N.
  3. Введите некоторые данные
  4. Из отдельной сессии напишите PTY первой сессии.
  5. Попробуйте нажать ctrl-N, чтобы перепечатать мой ввод.

введите описание изображения здесь

Я ожидал, что он обновит мой ввод и удалит вывод, который был записан. Однако эффекта не было. Вывод все еще загромождает мой редактор строк. Я проверил это icanonи iextenнастроил на этот PTY.

решение1

Я предполагаю, что ваша оболочка — это bashили какая-то другая оболочка с полнофункциональными возможностями редактирования строк.

Эти оболочки, ожидая ввода команды, устанавливают режим tty на raw, а не на canonical, поэтому данная настройка rprntк ним не применяется.

Инструмент командной строки sttyне сообщает об этом, поскольку эти оболочки переключают настройки туда и обратно на время редактирования строки, а не запуска запрошенной внешней программы (например, sttyсамой себя). Вы можете подтвердить это, запустив stty -a < /dev/pts/[this-terminal's-number]другой терминал, пока этот находится в подсказке.

Выберите программу, которая делаетнетиметь полноценные возможности редактирования строк, такие как cat, dashили подобные. Вы обнаружите, что выдача stty rprnt ^Nавансом и нажатие ^Nдействительно перепечатывает заданную строку. По крайней мере, я проверил, и это работает для меня.

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

Связанный контент