web-dev-qa-db-fra.com

Comment spécifier un autocomplete personnalisé pour des commandes spécifiques?

Y a-t-il un moyen d'avoir Bash savoir exactement quoi d'affichage lorsque vous double onglet? Par exemple, j'ai un python script scpy qui nécessite quelques arguments. Par exemple comme apt-get, si vous double tab vous donne

[

Existe-t-il un moyen de le faire pour vos propres scripts/programmes? Dois-je envelopper mon python script dans un script Bash?

28
Falmarri

Le moyen le plus simple consiste à inclure un script shell dans /etc/bash_completion.d/. La structure de base de ce fichier est une fonction simple qui effectue l'achèvement, puis l'invocation de complete qui est une bash intégrée. Plutôt que d'entrer dans les détails sur l'utilisation complete, je vous suggère de lire ne introduction à l'achèvement de Bash . La partie 1 couvre les bases et la partie 2 conclut comment vous iriez écrire un script d'achèvement.

Une description plus dense de l'achèvement des bash peut être trouvée dans la section "Achèvement programmable" de man bash (vous pouvez taper "/ terminaison programmable", puis appuyez plusieurs fois sur "N" quelques fois pour y y arriver rapidement. Ou, si vous vous sentez de chance, "g 2140 retour").

32
Steven D

Voici le guide de base.

Permet d'avoir un exemple de script appelé Admin.Sh auquel vous souhaitez avoir un fonctionnement automatique.

#!/bin/bash

while [ $# -gt 0 ]; do
  arg=$1
  case $arg in
    option_1)
     # do_option_1
    ;;
    option_2)
     # do_option_1
    ;;
    shortlist)
      echo option_1 option_2 shortlist
    ;;
    *)
     echo Wrong option
    ;;
  esac
  shift
done

Remarque liste d'options. Le script d'appel avec cette option imprimera toutes les options possibles de ce script.

Et ici, vous avez le script autocomplete:

_script()
{
  _script_commands=$(/path/to/your/script.sh shortlist)

  local cur prev
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )

  return 0
}
complete -o nospace -F _script ./admin.sh

Notez que le dernier argument à terminer est le nom du script que vous souhaitez ajouter de l'auto-répartition. Tout ce que vous avez à faire est d'ajouter votre script autocomplete à Bashrc comme

source /path/to/your/autocomplete.sh

ou copiez-le à /etc/bash.comPletion.d

Source: https://askubuntu.com/a/483149/24155

9
Eduardo Cuomo