8 votes

complétion d'onglet pour la commande service sur debian

J'ai deux systèmes avec debian squeeze installé. Sur l'un des systèmes, lorsque je tape :

service <TAB> 

il me montre tous les services disponibles (à partir de /etc/init.d)

sur l'autre système, il me montre tous les fichiers du répertoire courant. Quelqu'un sait-il quel paramètre modifie ce comportement ?

UPDATE :

Le fichier /etc/bash_completion.d/service était manquant. Je l'ai copié depuis la machine où il fonctionne. Si je tape complete -p | grep service ça me montre :

complete -F _service service

Sur la machine où cela ne fonctionne pas, cette commande ne me montre rien. J'ai exécuté complete -F _service service dans la ligne de commande, après cela, la commande service <TAB> me montre :

service -su: completion: function `_service' not found

cette fonction est définie dans le fichier de service que j'ai récemment copié, pour certaines raisons, elle ne peut être trouvée ...

0 votes

Avez-vous /etc/bash_completion.d/service présent ?

0 votes

Le fichier n'était pas là, je l'ai ajouté, mais ça ne fonctionne toujours pas. J'ai vu qu'avec complete -p je peux afficher toutes les liaisons, sur la machine où ça marche il me montre beaucoup de liaisons, là où ça ne marche pas il n'affiche rien. Je pense qu'il ne lie pas pour une raison quelconque les fichiers dans /etc/bash_completion.d ...

22voto

rush Points 1941

Tout d'abord, vérifiez si bash-completion est installé :

 $ dpkg -l bash-completion | tail -1

cela devrait donner quelque chose comme :

ii  bash-completion  1:1.3-1  programmable completion for the bash shell

Si la sortie est vide, installez-la avec :

aptitude install bash-completion

Vérifiez ensuite s'il est activé :

 $ grep -A 2 bash_completion ~/.bashrc /etc/bash.bashrc

Cela devrait donner quelque chose comme

~/.bashrc:if [ -f /etc/bash_completion ]; then
~/.bashrc:    . /etc/bash_completion
~/.bashrc:fi

Si rien n'y ressemble ou si elle est commentée (a # après ~/.bashrc: ) puis ajouter/supprimer

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

dans ~/.bashrc et le relire avec

. ~/.bashrc

Après cela, il devrait fonctionner correctement.

1 votes

La complétion bash fonctionne sur les deux machines, mais différemment. si je tape service <TAB> il me montre tous les services sur une machine, sur l'autre les fichiers du répertoire courant.

0 votes

Les versions de bash-completion la même chose ?

0 votes

Mêmes versions debian, quelques compléments bash

0voto

Fyrd Points 181

J'avais le même problème, mais "tab" ne montrait que deux des nombreux services. En regardant dans /usr/share/bash-completion/bash_completion vous pouvez voir :

_sysvdirs()
{
    sysvdirs=( )
    [[ -d /etc/rc.d/init.d ]] && sysvdirs+=( /etc/rc.d/init.d )
    [[ -d /etc/init.d ]] && sysvdirs+=( /etc/init.d )
    # Slackware uses /etc/rc.d
    [[ -f /etc/slackware-version ]] && sysvdirs=( /etc/rc.d )
}

Dans mon cas, le répertoire /etc/rc.d/init.d existait et ne comportait que deux services. Après avoir supprimé ce répertoire, tout a fonctionné correctement.

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