Haz todo lo posible por entender el código correctamente previamente a utilizarlo a tu trabajo y si ttienes algo que aportar puedes comentarlo.
Solución:
Tendrás que crear un nuevo archivo:
/etc/bash_completion.d/foo
Para static autocompletar (--help
/ --verbose
por ejemplo) agregue esto:
_foo()
local cur prev opts
COMPREPLY=()
cur="$COMP_WORDS[COMP_CWORD]"
prev="$COMP_WORDS[COMP_CWORD-1]"
opts="--help --verbose --version"
if [[ $cur == -* ]] ; then
COMPREPLY=( $(compgen -W "$opts" -- $cur) )
return 0
fi
complete -F _foo foo
COMP_WORDS
es un array que contiene todas las palabras individuales en la línea de comando actual.COMP_CWORD
es un índice de la palabra que contiene la posición actual del cursor.COMPREPLY
es un array variable desde la que Bash lee las posibles terminaciones.
Y el compgen
comando devuelve el array de elementos de --help
, --verbose
y --version
hacer coincidir la palabra actual "$cur"
:
compgen -W "--help --verbose --version" -- ""
Fuente
Puede utilizar la finalización programable. echa un vistazo /etc/bash_completion
y /etc/bash_completion.d/*
para algunos ejemplos.
Aquí hay un tutorial completo.
Tengamos un ejemplo de script llamado admin.sh
a la que le gustaría que funcione el autocompletado.
#!/bin/bash
while [ $# -gt 0 ]; do
arg=$1
case $arg in
option_1)
# do_option_1
;;
option_2)
# do_option_2
;;
shortlist)
echo option_1 option_2 shortlist
;;
*)
echo Wrong option
;;
esac
shift
done
Tenga en cuenta la opción shortlist
. Llamar al script con esta opción imprimirá todas las opciones posibles para este script.
Y aquí tienes el script de autocompletar:
_script()
_script_commands=$(/path/to/your/script.sh shortlist)
local cur
COMPREPLY=()
cur="$COMP_WORDS[COMP_CWORD]"
COMPREPLY=( $(compgen -W "$_script_commands" -- $cur) )
return 0
complete -o nospace -F _script ./admin.sh
Tenga en cuenta que el último argumento para completar es el nombre del script al que desea agregar el autocompletado. Todo lo que necesita hacer es agregar su secuencia de comandos de autocompletar a bashrc como
source /path/to/your/autocomplete.sh
o cópielo en /etc/bash.completion.d
Puntuaciones y comentarios
Nos puedes reafirmar nuestro estudio exponiendo un comentario o valorándolo te damos la bienvenida.