Executar uma função de linha de leitura sem a combinação de teclas?

26

Eu estava lendo a página de manual readline e descobri vários comandos excelentes que eu não conhecia. No entanto, vários não têm ligações de teclas padrão. Existe uma maneira de executar os comandos não acoplados do shell?

Não estou perguntando como vincular o comando em ~ / .inputrc, mas como executá-lo como um "momento único" do shell ou em um script bash.

Por exemplo, o comando "dump-variable". Existe algum comando que eu possa alimentar "variáveis ​​de despejo" como um argumento para executá-lo?

erikcw
fonte
2
Eu não acho que exista, de uma rápida olhada no manual e na fonte do readline.
Jim Paris

Respostas:

10

Acredito que o que você está procurando é o bindpróprio comando. De acordo com as man builtininformações, a execução bind <readline-command>permite executar pontuais, no entanto, eu não consegui fazê-lo funcionar como o manual diz que deveria ... continuava fazendo as chaves não funcionarem para mim; sua milhagem pode variar. Encontrei os seguintes comandos que podem ser úteis para você.

bind -p # Equivalent to dump-functions [machine readable]
bind -P # Equivalent to dump-functions [human readable]

bind -s # Equivalent to dump-macros    [machine readable]
bind -S # Equivalent to dump-macros    [human readable]

bind -v # Equivalent to dump-variables [machine readable]
bind -V # Equivalent to dump-variables [human readable]

Editar Nota Gostaria de salientar como é chato que ele não funcione como o manual diz que deveria, porque se você digitar binde pressionar tab para concluir automaticamente, ele mostra todos os comandos.

sparticvs
fonte
3
Estou chamando diretamente as funções readline: Eu não acho que o manual realmente afirme que você pode fazer isso; caso você esteja se referindo ao formulário de sintaxe bind readline-command: Suspeito que commandexista uma linha de definição (mapeamento), não uma função de linha de leitura diretamente solicitável . A conclusão automática é um detalhe explicitamente pré-configurado em algumas plataformas (por exemplo, Fedora 20), mas não em muitas outras ; sua presença NÃO implica que você possa chamar funções readline diretamente - é uma especificação de conclusão de comando bastante "burra": a conclusão funciona em qualquer argumento fornecido bind.
mklement0
11
+1 para os comandos listarem funções / macros / variáveis ​​em vigor; Vale acrescentar -Xpara comandos shell (definidos via -x).
mklement0