console-decode-ecma48 did not appear to work;
Судя по ответу на вопрос, это действительно сработало. Что не сработало, так это ваша команда
echo
, которую вы вызвали неправильно, в первую очередь не сгенерировав управляющие последовательности. Показанный декодированный вывод — это то, что вашаecho
команда фактически испускает .% echo -n '\e[1;5D' \e[1;5D%
console-decode-ecma48
декодирует фактические ECMA -48 управляющие последовательности, используемые в терминальном вводе и выводе, а не закодированные их представления.Таким образом, вам нужно передать ему фактические управляющие последовательности ECMA -48.Существуют способы заставить
echo
сделать это, но то, что происходит сecho
, варьируется от оболочки к оболочке, и лучшим подходом является использованиеprintf
.% printf '\e[1;5D' | console-decode-ecma48 --input Control+CUB 1 %Однако это не идеально, потому что кодировка, используемая GNU Readline, уникальна и не используется полностью ни с чем другим, например, escape-последовательности, используемые в
printf
и (, иногда )вecho
, или в кодировкеvis
/unvis
.
printf
будет обрабатывать многие из ваших оставшихся неизвестных, но не может преобразовать\C-
последовательности в управляющие коды. Вам нужно будет заранее перевести формы\C-c
в восьмеричные управляющие последовательности, которые понимаетprintf
. В противном случае он просто не напечатает правильную последовательность из 48 символов ECMA -для декодирования в первую очередь.% printf '\C-g' | console-decode-ecma48 --input '\' 'C' '-' 'g' % printf '\007' | console-decode-ecma48 --input BEL %Опция
--input
необходима, поскольку это вход терминала , который вы декодируете. Для обработки и #x2387; Alt ключевые аккорды вам также нужна опция--no-7bit
для предотвращения декодирования (почти всех )ECMA -48 7 -битовый код расширения и другие escape-последовательности, которые в противном случае будут декодированы в соответствии с ECMA -48 в их правильное значение.% printf '\eD' | console-decode-ecma48 --input IND % printf '\eb' | console-decode-ecma48 --input EMI % printf '\eD' | console-decode-ecma48 --input --no-7bit Meta 'D' % printf '\eb' | console-decode-ecma48 --input --no-7bit Meta 'b' %Перебирая вывод
bind -p
и подавая первую последовательность полей последовательно вprintf
(, переводя\C-c
в восьмеричный escape заранее ), я оставляю читателю в качестве упражнения, как ясно из вопроса, который вы знаю, как это сделать.Значения стандартных сокращений, используемых в выходных данных, см. в пояснениях и стандартах, на которые имеются ссылки в руководстве.
Дополнительная литература
- Почему printf лучше, чем echo?
- Джонатан де Бойн Поллард (2018 ). «
console-decode-ecma48
». Направляющая ноша . Программное обеспечение.
Все пакеты, отправляемые из интерфейса VLAN, помечаются соответствующим идентификатором VLAN. И этот интерфейс получает только те пакеты с его идентификатором VLAN.