Вы можете поместить команду в фон, чтобы сохранить текущий bash открытым:
some_program with its arguments &
Чтобы вернуться к запуску, вы можете использовать команду fg
и ^+z
, чтобы снова поместить ее в фон
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 заранее ), я оставляю читателю в качестве упражнения, как ясно из вопроса, который вы знаю, как это сделать.
Значения стандартных сокращений, используемых в выходных данных, см. в пояснениях и стандартах, на которые имеются ссылки в руководстве.
console-decode-ecma48
». Направляющая ноша . Программное обеспечение. Много информации о последовательностях клавиш можно почерпнуть из справочной страницы console_codes
. Например, для \e[1;5C
имеем:
ECMA-48 CSI sequences
CSI (or ESC [) is followed by a sequence of parameters, at most NPAR (16), that are decimal numbers separated by semicolons. (...) The action of a CSI sequence is determined by its final character.
Это говорит нам о том, что первое число 1
— это параметр, а C
— это действие. Глядя дальше вниз, мы можем успешно найти действие:
C CUF Move cursor right the indicated # of columns.
Это означает, что последовательность описывает клавишу, которая перемещает курсор вправо на один символ... это клавиша → !
Недокументированный (? )Здесь префикс 5
указывает на клавишу управления. Это упоминается в следующем документе , хотя я думаю, что это было бы проще (, но уж точно не просто! )чтобы угадать.
Я не знаю простого способа преобразовать подобный управляющий код в удобочитаемую -форму, однако преобразование в обратном направлении простое, нужно просто нажать C -v в Bash, за которым следует комбинация клавиш,и его управляющая последовательность будет отображаться на экране в символической форме, например, Ctrl + v , Ctrl→ даст ^[[1;5C
.