60 votes

La complétion automatique des onglets ne fonctionne pas pour les commandes

Je suis en train d'essayer d'utiliser la complétion de tabulation pour les commandes dans Ubuntu 11.04 Beta 1, en exécutant toutes les dernières mises à jour, mais cela ne semble pas fonctionner. (Bien que le package bash-completion soit installé)

La complétion de tabulation fonctionne correctement uniquement pour les répertoires ou les fichiers.

Des idées sur où creuser?

76voto

Adam Byrtek Points 9538

Vérifiez si vous avez le fragment suivant dans votre .bashrc (il devrait y être par défaut)

# activer les fonctionnalités de complétion programmable (vous n'avez pas besoin d'activer cela, si c'est déjà activé dans /etc/bash.bashrc et /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

14voto

J'ai pensé ajouter également l'explication suivante pour un échec de complétion de bash - elle est trop longue pour un commentaire et peut être utile pour quelqu'un qui a un problème avec la complétion de bash, car c'est apparemment la question canonique 'générale' à laquelle toutes les doublons renvoient.

Même si vous avez la ligne appropriée dans votre .bashrc (comme dans la réponse ci-dessus) et le package bash-completion installé, la complétion de bash peut toujours dysfonctionner si vous avez soit shopt -s nullglob ou shopt -s failglob dans votre .bashrc ou .bash_aliases.

Les scénarios suivants ont été testés avec toutes les personnalisations de l'utilisateur de .bashrc et .bash_aliases supprimées pour un test équitable, avec la ligne de complétion de bash appropriée dans .bashrc et avec bash-completion installé.

1) Le premier scénario est lorsque vous avez shopt -s failglob dans votre .bashrc ou .bash_aliases.

Lorsque vous essayez de compléter par tabulation des répertoires et des fichiers respectivement, ces erreurs se produiront :

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Cependant, les commandes se compléteront toujours avec succès.

2) Avec shopt -s nullglob activé, en essayant de compléter par tabulation un répertoire ou un fichier, tout sera listé, sans complétion :

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

J'ai raccourci la liste ici, car elle était très longue et pas nécessaire de tout reproduire.

Encore une fois, la complétion des commandes fonctionnera toujours cependant.

Ainsi, simplement en supprimant shopt -s failglob ou shopt -s nullglob pourrait également résoudre le problème d'erreurs avec la complétion de bash, en supposant que vous avez la ligne appropriée dans votre .bashrc et que bash-completion est installé.

12voto

Serge S. Points 221

En plus de modifier le fichier /etc/bash.bashrc (voir d'autres réponses), vous devrez peut-être installer le package bash-completion.

Vérifiez si le fichier /etc/bash_completion existe. Sinon :

sudo apt-get install bash-completion

(Dans mon installation de Debian 7, il n'était pas installé initialement)

9voto

nocdib Points 91

Aussi basique que cela puisse paraître, assurez-vous que bash est votre shell actif

echo $SHELL

Je viens de passer à Ubuntu 14.04.1 LTS et je n'avais pas d'auto-complétion des onglets, même après avoir suivi les conseils de cet article, seulement pour réaliser que mon shell était défini sur /bin/sh et non sur /bin/bash.

3voto

Arlen Points 21

Mise à jour vers Ubuntu 14.04.01

Vérifiez si vous avez le fragment suivant dans votre .bashrc (devrait être là par défaut)

sudo vim /etc/bash.bashrc (tapez "i" pour éditer le fichier)

# activer la complétion bash dans les shells interactifs
si ! shopt -oq posix; alors
  if [ -f /usr/share/bash-completion/bash_completion ]; alors
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; alors
    . /etc/bash_completion
  fi
fi

Décommentez les 7 lignes ci-dessus

Enregistrez le fichier "esc + w + q + entrée"

Redémarrez bash

exec bash

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X