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
проблема.