Cómo agregar autocompletado con TAB a tus comandos personalizados en Linux

🚀 Cómo agregar autocompletado con TAB a tus comandos personalizados en Linux
Cuando comenzamos a crear nuestros propios comandos en Linux, normalmente nos conformamos con que funcionen:
buscar -s linux
o
miip
Pero existe una característica que hace que una herramienta casera se sienta mucho más profesional:
👉 el autocompletado con la tecla TAB.
Es exactamente lo que hacen herramientas como:
git
apt
docker
systemctl
Por ejemplo:
git ch<TAB>
se convierte automáticamente en:
git checkout
o:
systemctl re<TAB>
puede completarse como:
systemctl restart
Lo mejor es que cualquier comando que crees puede tener esta misma funcionalidad.
¿Cómo funciona el autocompletado?
Cuando presionas TAB, Bash busca si existe una regla de autocompletado asociada al comando que acabas de escribir.
Por ejemplo:
buscar -<TAB>
Bash puede recibir una lista de opciones válidas:
-s
-h
-u
--search
--help
--update
y mostrarlas automáticamente.
Todo esto se controla mediante scripts especiales de Bash.
Comprobando si Bash Completion está instalado
La mayoría de distribuciones modernas ya lo incluyen.
Puedes verificarlo con:
dpkg -l | grep bash-completion
Si no aparece instalado:
sudo apt install bash-completion
Nuestro comando de ejemplo
Supongamos que tenemos un comando llamado:
buscar
que acepta:
buscar -s linux
buscar --search linux
buscar -u
buscar --update
Queremos que TAB complete esas opciones.
Crear el script de autocompletado
Creamos un archivo:
buscar-completion
Contenido:
_buscar_completion()
{
local opciones
opciones="-s --search -u --update -h --help"
COMPREPLY=(
$(compgen -W "${opciones}" -- "${COMP_WORDS[COMP_CWORD]}")
)
}
complete -F _buscar_completion buscar
¿Qué significa cada parte?
Función de completado
_buscar_completion()
Es la función que Bash ejecutará al presionar TAB.
Lista de opciones
opciones="-s --search -u --update -h --help"
Aquí definimos las opciones válidas.
compgen
compgen -W
Genera sugerencias automáticamente.
Por ejemplo:
Si escribimos:
buscar --s<TAB>
Bash revisará:
-s
--search
-u
--update
-h
--help
y encontrará:
--search
complete
complete -F _buscar_completion buscar
Asocia la función al comando.
Probarlo sin reiniciar
Podemos cargarlo manualmente:
source buscar-completion
Ahora probamos:
buscar --<TAB>
y veremos las opciones disponibles.
Instalar el autocompletado permanentemente
La ubicación recomendada es:
/etc/bash_completion.d/
Copiamos:
sudo cp buscar-completion /etc/bash_completion.d/buscar
Abrimos una terminal nueva.
Ahora funcionará siempre.
Autocompletar nombres de archivo
Esto es extremadamente útil.
Supongamos que creamos una herramienta llamada:
hashfile
que calcula hashes.
Uso:
hashfile archivo.iso
Podemos hacer que TAB complete archivos automáticamente.
Archivo:
hashfile-completion
Contenido:
_hashfile_completion()
{
COMPREPLY=(
$(compgen -f -- "${COMP_WORDS[COMP_CWORD]}")
)
}
complete -F _hashfile_completion hashfile
Resultado
Si escribimos:
hashfile ubu<TAB>
Bash puede completar:
hashfile ubuntu.iso
Autocompletar directorios
Para herramientas que trabajan con carpetas:
_backup_completion()
{
COMPREPLY=(
$(compgen -d -- "${COMP_WORDS[COMP_CWORD]}")
)
}
complete -F _backup_completion backup
Ejemplo práctico: comando backup
Supongamos este comando:
backup /home/usuario/Documentos
Con TAB:
backup /ho<TAB>
Bash completa:
backup /home/
Autocompletado inteligente según la posición
Aquí es donde empiezan a trabajar las herramientas profesionales.
Queremos que:
buscar -s linux
muestre opciones cuando estamos escribiendo el primer argumento.
Creamos:
_buscar_completion()
{
local actual
actual="${COMP_WORDS[COMP_CWORD]}"
if [[ ${COMP_CWORD} -eq 1 ]]; then
COMPREPLY=(
$(compgen -W "-s --search -u --update -h --help" -- "$actual")
)
fi
}
¿Qué es COMP_CWORD?
Bash numera cada palabra.
Ejemplo:
buscar -s linux
Internamente:
COMP_WORDS[0] = buscar
COMP_WORDS[1] = -s
COMP_WORDS[2] = linux
Y:
COMP_CWORD
indica en cuál estamos escribiendo.
Crear sugerencias dinámicas
Ahora viene una técnica muy interesante.
Imaginemos que nuestro comando descarga categorías:
buscar redes
buscar linux
buscar bash
buscar python
Podemos generar sugerencias automáticamente.
_buscar_completion()
{
local actual
actual="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=(
$(compgen -W "linux bash python redes seguridad tor" -- "$actual")
)
}
Resultado
Escribimos:
buscar li<TAB>
Y Bash completa:
buscar linux
Consultar datos desde un archivo
También podemos leer opciones desde un archivo.
categorias=$(cat ~/.comandos-busqueda/categorias.txt)
COMPREPLY=(
$(compgen -W "$categorias" -- "$actual")
)
Así las sugerencias cambian automáticamente cuando cambia el archivo.
Cómo saber si un comando tiene autocompletado
Puedes usar:
complete -p
Para listar todos los comandos registrados.
El truco que usan muchas aplicaciones
Una técnica muy común es que el propio programa genere las opciones.
Por ejemplo:
buscar --list-options
devuelve:
linux
bash
python
redes
tor
Y el script de Bash simplemente ejecuta:
opciones=$(buscar --list-options)
De esta forma el autocompletado siempre está sincronizado con el programa.
Estructura recomendada
Si tienes una herramienta propia:
/usr/local/bin/buscar
/etc/bash_completion.d/buscar
/opt/buscar/
Tendrás:
- comando global
- autocompletado
- archivos organizados
Exactamente igual que muchas aplicaciones profesionales.
Agregar autocompletado con TAB es una de las mejoras más simples y más impresionantes que puedes hacer a tus herramientas personalizadas.
No necesitas modificar Bash ni programar nada complejo. Basta con crear una pequeña función que indique a Bash qué opciones debe sugerir.
Una vez que empiezas a usar autocompletado en tus propios comandos, es difícil volver atrás. Tus herramientas se sienten más rápidas, más cómodas y mucho más profesionales, acercándose al comportamiento de aplicaciones como Git, Docker o Systemctl.



