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ó.


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.


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




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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.