Даже с время ожидания и (некоторое) количество символов для чтения, похоже, bash
( версия 4.2.46 (1) -release
) может не сохранить REPLY
, здесь путем выдачи управляющей последовательности «Report Cursor Position», сначала с введенной новой строкой, а второй - с ожиданием тайм-аута:
$ echo -ne '\033[6n' && read -n 16 -s -t 3; echo -n $REPLY | xxd
0000000: 1b5b 3234 3b31 52 .[24;1R
$ echo -ne '\033[6n' && read -n 16 -s -t 3; echo -n $REPLY | xxd
$
Проблема здесь в том, что -n
больше, чем количество возвращенных байтов; если -n
вместо этого имеет точный или меньший размер, ответ будет прочитан без необходимости ввода (или тайм-аута).Если вам известен последний уникальный символ строки ответа, вы можете получить ответ, разделив «строки» этим символом; для запроса позиции символа отчета, что разделитель может быть принят равным R
:
$ echo -ne '\033[6n' && read -n 999 -d R -s; echo -n $REPLY | xxd
0000000: 1b5b 3234 3b31 .[24;1
$
Учитывая неизвестный ввод неизвестной длины, вам придется либо сообщить об ошибке для bash
, либо возможно, утомительно грызть байты один за другим, пока не сработает тайм-аут:
$ out="got "; echo -ne '\033[6n'; while read -n 1 -s -t 1; do out="$out$REPLY"; done
$ echo -n $out | xxd
0000000: 676f 7420 1b5b 3234 3b31 52 got .[24;1R
$
Для control + e вещь, я полагаю , терминал может отправить что-то обратно , но должен быть настроен на сделайте так:
ENQ Return Terminal Status (Ctrl-E). Default response is an empty
string, but may be overridden by a resource answerbackString.