Usando bind para ler a linha de comando atual

2

Estou usando bind -x para executar um script sempre que uma determinada sequência de teclas for pressionada.

Por exemplo, eu tenho um script em /usr/local/bin/foo com o conteúdo

#!/bin/bash
echo foo

Se eu executar bind -x '" ": /usr/local/bin/foo' , toda vez que eu pressionar a barra de espaço duas vezes, ele ecoa "foo". Até aí tudo bem.

O que eu quero ser capaz de fazer é acessar (e idealmente modificar) o comando atual que está sendo inserido. Se eu digitar some really long command (existem dois espaços no final), meu script será executado, mas como ele pode ver que eu já inseri some really long command e mudei para some other long command ?

    
por David King 23.12.2015 / 15:24

1 resposta

5

Com base em esta resposta , acho que você teria que transformar seu script em uma função bash de origem, modifique READLINE_LINE (e READLINE_POINT de acordo com o novo comprimento / ponto do cursor desejado) e, em seguida, bind -x '" " : that-function-name' .

Só para esclarecer; se você quiser modificar apenas alguns comandos alguns com espaço duplo, faça algo como:

autocomplete() {
if [ "$READLINE_LINE" = "some really long command" ]
then
    READLINE_LINE="some other long command"
    READLINE_POINT=23
fi
}

bind -x '"  " : autocomplete'
    
por 23.12.2015 / 15:54

Tags