Ctrl-C в подстановке команды rlwrap останавливает эхо - PullRequest
0 голосов
/ 05 января 2019

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

REPLY=$(rlwrap head -n 1)

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

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

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

но тогда REPLY не был установлен, когда я нажал Enter. Я пробовал как в bash, так и в dash, с одинаковыми результатами EDIT: Извините, из-за опечатки в shebang, dash не выполнялся. Он работает правильно в тире.

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

Ответы [ 2 ]

0 голосов
/ 07 января 2019

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

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

#!/bin/bash --noediting

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

0 голосов
/ 06 января 2019

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

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

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

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

...