Finalización de pestañas bash personalizadas

34

Tengo mi utilidad de consola personalizada cooltoolcon una lista de opciones

fooOption
barOption

¿Qué debo hacer para bash autocompletar las opciones presionando la tabtecla?

Me refiero a que el usuario escribió

$ ./cooltool foo_

luego presionado tab. Y entonces

$ ./cooltool fooOption _

apareció.

Wuffers
fuente
1
No cruce la publicación.
Wuffers
2
Tenga en cuenta que este se migra y el otro no. Creo que muchos usuarios todavía no se dan cuenta de que no deberían publicar una pregunta en varios sitios de SE. Se utilizan para foros dispares que no son un sistema unificado, donde puede solicitar en algunos foros diferentes una mejor oportunidad de obtener una respuesta rápida.
jcrawfordor

Respuestas:

2

Escriba un script de finalización de bash para cooltool. El paquete bash-complete viene con scripts para muchos programas populares, que puede usar como ejemplos.

Gravedad
fuente
40

La forma más simple es agregar lo siguiente a su .bashrc.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Cada vez que escribe cooltool f[TAB][TAB], _cooltool()se invoca la función. Resolverá cuál es su palabra parcial actual y luego compgendeterminará qué opciones coinciden. Estos se almacenan en una matriz llamada COMPREPLYque luego se muestra. Mira man completey man compgenpara más detalles.

Para un buen tutorial, consulte: Escribir su propia función de finalización de Bash

dogbane
fuente
7

Es posible que desee echar un vistazo más de cerca dentro de su directorio /etc/bash_completion.d en su sistema.

También deberías leer esta introducción . La segunda parte de la introducción es la que necesita.

AlexTheBird
fuente
1
Estoy usando Mac OS X 10.6, por lo que no hay un directorio
Ah Ok, es bueno saberlo.
2

Además de la respuesta de dogbane, también puedes hacer:

complete -W "fooOption barOption" cooltool

si simplemente desea hacer coincidir una lista de palabras desde el comienzo de la cadena. Parece que completo y compgen comparten la mayoría de las opciones. Solo he notado la coincidencia del "comienzo de la cadena" en los comandos que uso, por lo que me pareció ordenado que pueda hacer otras cosas en la función _cooltool como:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

para que coincida en cualquier lugar del nombre de la opción.

dcc310
fuente