Comment TAB remplit-il automatiquement les options à compléter?

33

Et comment fonctionne-t-il également les alias auto-complets?

theTuxRacer
la source

Réponses:

22

En fonction de la commande:

  • Quelqu'un peut avoir écrit une fonction pour générer des compléments possibles, y compris des options. Vous trouverez des fonctions pour certaines commandes dans /etc/bash_completion.d/*(ou à un emplacement différent sur certains systèmes). Ces fonctions sont enregistrées avec les fonctions intégrées (par exemple, indique à bash d'appeler la fonction lorsque vous appuyez sur une commande). Ils utilisent la fonction intégrée pour dire à bash «voici les compléments possibles».complete complete -F _find find_findTabfindcompgen
  • Pour certaines commandes, bash appellera la commande avec l'argument --helpet analysera le résultat. De telles commandes peuvent être enregistrées avec les fonctions completeintégrées, par exemple complete -F _longopt ls. _longoptest en fait une fonction de génération d'achèvement, qui analyse la sortie d'une commande plutôt que d'utiliser une liste fixe. (Il existe d'autres fonctions d'achèvement plus spécialisées qui analysent le résultat d'une commande pour générer des achèvements possibles; recherchez /etc/bash_completion.d/*des exemples.)
  • Pour des choses comme les alias, la fonction d'achèvement les recherche dans les tables internes de bash. L' completeintégré a des options pour cela, par exemple -Apour les alias.
Gilles, arrête de faire le mal
la source
10

Regardez le fichier

/ etc / bash_completion

et observez les fichiers du répertoire:

/etc/bash_completion.d

Vous trouverez la réponse.

SHW
la source
2

La prise en charge de l’achèvement de bash est fournie dans Debian et Ubuntu par le paquet d’achèvement de bash . Vous devez également généralement supprimer les commentaires suivants /etc/bash.bashrcet / ou rechercher .bashrcles fichiers d’achèvement de bash. Ce qui suit est de /etc/bash.bashrc:

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

pour que cela fonctionne. J'ai l'habitude de le commenter dans les deux cas. La gestion des shells de connexion / interactifs dans Debian est un peu un fouillis.

Des commentaires similaires s’appliquent vraisemblablement à d’autres distributions, bien qu’ils permettent peut-être de rechercher les sources par défaut.

Faheem Mitha
la source