Essas são seqüências de caracteres enviadas pelo seu terminal quando você pressiona uma tecla específica. Nada a ver com bash ou linha de leitura propriamente dita, mas você desejará saber qual sequência de caracteres uma determinada tecla ou combinação de teclas envia se desejar configurar readline
para fazer algo após pressionar uma tecla.
Quando você pressiona a Atecla, geralmente os terminais enviam o a
caractere (0x61). Se você pressionar <Ctrl-I>
ou <Tab>
, geralmente enviará o ^I
caractere também conhecido como TAB
ou \t
(0x9). A maioria das teclas de função e navegação geralmente envia uma sequência de caracteres que começa com ^[
(control- [), também conhecido como ESC
ou \e
(0x1b, 033 octal), mas a seqüência exata varia de terminal para terminal.
A melhor maneira de descobrir o que uma tecla ou combinação de teclas envia para o seu terminal é executar sed -n l
e digitar seguido pelo Enterteclado. Então você verá algo como:
$ sed -n l
^[[1;5A
\033[1;5A$
A primeira linha é causada pelo terminal local echo
feito pelo dispositivo de terminal (pode não ser confiável, pois as configurações do dispositivo de terminal o afetariam).
A segunda linha é emitida por sed
. O $
não deve ser incluído, é apenas para mostrar onde está o fim da linha.
Acima Isso significa que Ctrl-Up(que eu tenha pressionado) enviar os 6 caracteres ESC
, [
, 1
, ;
, 5
e A
(0x1b 0x5b 0x31 0x3b 0x35 0x41)
O terminfo
banco de dados registra várias sequências para várias chaves comuns para vários terminais (com base no $TERM
valor).
Por exemplo:
TERM=rxvt tput kdch1 | sed -n l
Diria qual sequência de escape é enviada rxvt
ao pressionar a Deletetecla.
Você pode procurar qual tecla corresponde a uma determinada sequência com o seu terminal atual com infocmp
(aqui assumindo ncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Combinações de teclas como Ctrl-Upnão possuem entradas correspondentes no terminfo
banco de dados; portanto, para descobrir o que elas enviam, leia a fonte ou a documentação do terminal correspondente ou tente com o sed -n l
método descrito acima.
bind -p
.