Ctrl-C в подстановке команды rlwrap останавливает эхо

Я использую что-то вроде этого в сценарии:

REPLY=$(rlwrap head -n 1)

На самом деле с большим количеством опций, но этого достаточно, чтобы воспроизвести проблему. Это прекрасно работает для моих целей... до тех пор, пока я не нажму Ctrl-C, чтобы выйти. Если я это сделаю, ввод эхо останавливается на терминале, и единственный способ восстановить его - это слепой ввод reset,

-I флаг не помог. Я также попробовал это:

rlwrap head -n 1 | REPLY=$(cat)

но тогда ОТВЕТ не был установлен, когда я нажал Enter. Я пробовал как в bash, так и в dash, с одинаковыми результатами РЕДАКТИРОВАТЬ: Извините, из-за опечатки на Шебанг, тире не был выполнен. Это работает правильно в тире.

Как я могу установить переменную для вывода rlwrap и быть в состоянии прервать без потери входного эха? Также из любопытства кто-нибудь знает, что здесь происходит?

2 ответа

Решение

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

Обновление: позже я обнаружил, что использование этого как shebang заставляет его работать и с bash:

#!/bin/bash --noediting

который в основном отключает readline для bash.

Ваше использование rlwrap в пределах $(...) конструкция правильная. То, что вы можете сделать это является частью rlwrap"прозрачность": все, что работает с <command> также должен работать с rlwrap <command>,

Я не могу воспроизвести проблему ни на одной из моих систем.

Это означает, что вы нашли ошибку. Вы уже опубликовали проблему на rlwrap Сайт Github.

Редактировать: straceИНГ rlwrap на двух системах, из которых только одна отображает ошибку, не показывает каких-либо существенных различий, поэтому мы заключаем, что это, вероятно, не rlwrap проблема.

Другие вопросы по тегам