Coloque isso no seu ~/.inputrc:
:
"\M-l": "ls -ltrF\r"
Meu .bashrc tem o seguinte:
# Alt+L lists current directory
bind -x "\"\el\":ls -ltrF --color=auto;"
# trap commands and echo them to xterm titlebar.
trap 'echo -ne "3]0;$BASH_COMMAND - $USER@${HOSTNAME}>$(pwd)bash-4.2$ [Alt+L] #works
total 0
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 foo
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 bar
bash-4.2$ ls -ltr #fails first time
bash: -ltr: command not found
bar foo
bash-4.2$ ls -ltr #works second time
total 0
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 foo
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 bar
7"' DEBUG
Demonstração do problema:
# Alt+L lists current directory
bind -x "\"\el\":ls -ltrF --color=auto;"
# trap commands and echo them to xterm titlebar.
trap 'echo -ne "3]0;$BASH_COMMAND - $USER@${HOSTNAME}>$(pwd)bash-4.2$ [Alt+L] #works
total 0
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 foo
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 bar
bash-4.2$ ls -ltr #fails first time
bash: -ltr: command not found
bar foo
bash-4.2$ ls -ltr #works second time
total 0
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 foo
-rw-rw-r-- 1 me 1234 0 Aug 3 07:11 bar
7"' DEBUG
Como você pode ver, o comando ls
falha na primeira vez após a execução da ligação de chave. Eu acredito que tem a ver com a armadilha. Remover a armadilha resolve o problema.
Existe alguma maneira de corrigir isso sem remover a armadilha?
Eu posso reproduzir isso com um exemplo bem menor. Eu tentei no bash 4.1 do Debian squeeze e um bash 4.2.8 (9) compilado da fonte.
% bash --norc
bash-4.1$ echo $BASH_VERSION
4.1.5(1)-release
bash-4.1$ bind -x '"7":echo foo;'
bash-4.1$ trap '$()' DEBUG
foo
bash-4.1$ echo bar
bash: bar: command not found
bash-4.1$
Pressione Ctrl + _ ( 7
) imediatamente após o retorno do comando trap
. O comando na armadilha $()
é um comando vazio produzindo saída vazia, portanto, um não-op. A substituição de comando parece ser o culpado, já que nada inesperado acontece se eu substituí-lo por :
ou por um espaço.
Eu não vejo como explicar uma diferença de comportamento entre $()
e um espaço, então isso parece um bug. Uma pesquisa superficial na lista de bug-bash não mostrou nada.
Tags bash keyboard-shortcuts trap