Quelles sont ces commandes de soulignement?

10

Quand je suis tab tab _en terminal, Bash propose 206 possibilités. J'ai essayé d'en diriger un _git_rmmais rien ne s'est passé, qu'est-ce que c'est?

Voici une capture d'écran:

entrez la description de l'image ici

dessiner
la source
11
type _git_rmvous dira probablement que c'est une fonction. grep -R '_git_rm' /etc/bash_completion.d/le trouvera probablement. Ces fonctions sont généralement celles qui fournissent les différentes listes d' bashachèvement à compléter.
manatwork
@manatwork veuillez poster cela comme réponse.
derobert
@derobert, je voulais seulement fournir un indice rapide pour que le propriétaire de la question reçoive quelque chose avant que la réponse de l'expert ne soit publiée ~ 7 heures plus tard.
manatwork
@manatwork La réponse me suffit ... Je peux explorer plus par moi-même: D Si cela ne vous dérange pas, j'accepterai la réponse de Gilles bien que je pense que je devrais accepter la vôtre ..
tirage
@draw, la réponse de Gilles est probablement basée sur la recherche et l'expérience, tandis que la mienne est basée sur des observations accidentelles faites lors de l'exploration des répertoires. Veuillez l'accepter.
manatwork

Réponses:

12

Ces fonctions dont le nom commence par un trait de soulignement font partie du moteur de complétion programmable. Bash suit la convention de zsh ici, où la fonction qui génère des complétions somecommandest appelée _somecommand, et si cette fonction nécessite des fonctions auxiliaires, elles sont appelées _somecommand_stuff.

Ces fonctions d'achèvement ne font généralement rien d'utile ou génèrent une erreur si vous les appelez manuellement: elles sont destinées à être appelées à partir du moteur d'achèvement.

Cela fait suite à une pratique assez répandue dans divers langages de programmation d'utiliser un trait de soulignement principal pour indiquer qu'une fonction ou une variable est en quelque sorte interne à une bibliothèque et n'est pas destinée à l'utilisateur final (ou au programmeur final).

Gilles 'SO- arrête d'être méchant'
la source