Saltar al contenido

¿Cómo crear un script con autocompletar?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *