Свойства команды cat

Даже с время ожидания и (некоторое) количество символов для чтения, похоже, 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.

0
25.07.2015, 03:08
0 ответов

Теги

Похожие вопросы