Nem todas as edições da linha bash
são controladas a partir de ~/.inputrc
; grande parte é configurada através do bind
builtin. Neste caso, você quer algo como
bind -x '"\C-gu":uptime'
no seu ~/.bashrc
.
(Background: Eu sou um usuário tcsh de longa data, gradualmente fazendo a transição para o bash e tentando encontrar equivalentes para alguns recursos específicos do tcsh.)
No tcsh, posso definir uma ligação de chave que executa um comando externo. Por exemplo, dado:
bindkey -c ^Gu uptime
Eu posso digitar "Control-G u" no tcsh e ele executará o comando uptime
. Eu não tenho que digitar Enter, o comando não aparece no meu histórico, e posso fazê-lo no meio de uma linha de entrada (acho o último particularmente útil para certos comandos).
O bash tem um mecanismo de ligação de chaves similar através da biblioteca readline do GNU, com ligações especificadas em $HOME/.inputrc
(ou em outro lugar). Mas depois de ler a documentação de info readline
, não vejo uma maneira de uma ligação de chave executar um comando externo.
A coisa mais próxima que eu descobri é adicionar algo assim ao meu arquivo .inputrc
:
"\C-gu": "uptime\n"
mas isso não executa o comando; em vez disso, ele age como se eu tivesse digitado uptime
seguido da tecla Enter. O comando aparece no meu histórico (ok) e funciona apenas em uma linha vazia; se eu digitar "echo control-Gu"
, então ele imprime uptime
em vez de executar o comando.
Outra desvantagem é que a ligação afeta outros comandos que usam a linha de leitura GNU, como o depurador Perl.
Existe uma maneira de simular o efeito de bindkey -c
do tcsh no bash, mapeando uma sequência de chaves para a execução de um comando externo especificado?
Se for importante, estou usando o bash 4.2.24 no Ubuntu 12.04 beta 2.