Completion avec tabulation dans le terminal

Fermé
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009 - 5 mars 2009 à 15:03
 Wikimig - 16 oct. 2009 à 23:41
Bonjour,

Lorsque j'essaie de compléter les commandes ou noms de fichiers via la touche tabulation, ça ne marche que lorsqu'il n'y a pas d'ambiguïté. Or, je souhaiterais qu'en cas d'ambiguïté le terminal me propose les différentes complétions, ce qu'il ne fait pas.
Exemple:

J'ai un répertoire /Denis et un répertoire /Denver

lorsque je tape

>>cd /Denv [TAB]

le terminal complète:

>>cd /Denver

Mais lorsque je tape
>>cd /Den [TAB][TAB]

le terminal ne me propose pas

/Denis /Denver


ce qu'il fait habituellement. Certes, la commande CTRL+D fonctionne, mais bon...

J'ajoute que j'ai ajouté les applications de tab complétion via yum, et que j'ai complété le .bashrc avec les lignes
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

Enfin, sur le même poste, en login root, la complétion est faite correctement... bizarre.

Merci pour vos réponses
A voir également:

12 réponses

bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
5 mars 2009 à 19:56
Bonjour,

Après avoir modifié le fichier .bashrc, avez-vous fait un source ?
0
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009
6 mars 2009 à 10:52
ah, non...

Je viens de regarder un peu la comande source. Un de mes problèmes est qu'il existe de nombreux fichiers du type .bashrc, et que je ne sais pas lequel je dois modifier: il y a un /etc/skel/.bashrc, un /etc/bashrc et un /root/.bashrc...

cela dit,
>>source /root/.bashrc

me renvoie:
if: Syntaxe de l'expression.

sans précision supplémentaire.
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
6 mars 2009 à 18:02
et que j'ai complété le .bashrc

c'est ce fichier .....

quel est son chemin absolu ?
0
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009
9 mars 2009 à 10:45
J'ai modifié les 3 que j'ai indiqués, pour voir si cela allait changer quelque chose:

/root/.bashrc
/etc/skel/.bashrc
/etc/bashrc

Mais rien n'y a fait... Je fais pour l'instant avec CTRL+D qui marche bien, mais j'aimerais que TAB-TAB fasse le même effet, ça serait plus plaisant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
9 mars 2009 à 18:48
as-tu un fichier bash_completion ???
0
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009
10 mars 2009 à 10:21
Ouais ouais ouais: voici ce que me renvoie le terminal quand je tape

# locate bash_completion

/etc/bash_completion
/etc/bash_completion.d
/etc/bash_completion.d/bittorrent
/etc/bash_completion.d/isql
/etc/profile.d/bash_completion.sh


j'imagine que c'est le 1er qui m'intéresse... ce qui est bizarre c'est que, sauf erreur, le fichier bash_completion est commun à tous les utilisateurs de la machine. Or, lorsque je suis en root, la completion est convenable. Lorsque j'utilise ma session, ça ne marche plus (pourtant les préférences du terminal sont identiques!)...
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
10 mars 2009 à 19:13
je vois pô !

là je suis sur la mandriva et j'ai quelques petites différences (pas de fichier /etc/bash_completion, mais un fichier /root/.bash_completion, par exemple).

pourtant l'autocompletion fonctionne aussi bien pour root que pour mon user !

peut-être regarder du côté du fichier inputrc ...


mais je regarderai sur la fedora dès que j'aurai un moment ...
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
10 mars 2009 à 20:46
avant de regarder le fichier inputrc (bien qu'il soit intéressant) :

as-tu fais un :
source /etc/bash_completion
0
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009
11 mars 2009 à 11:05
Mmouais... on arrive à un niveau que je ne peux plus suivre... mais effectivement ça n'a pas l'air top ici car voici ce que le terminal me renvoie:

>> source /etc/bash_completion
Mauvais : modificateur dans $ (-).

Alors je suis allé chercher (avec un vulgaire CTRL+F) dans le fichier /etc/bash_completion où était ce fameux "(-)". Il n'est présent qu'une fois dans tout le fichier, et je colle ci-dessous un gros bloc le contenant. En espérant que ça aide à localiser le hic.

# GNU tar(1) completion
#
_tar()
{
local cur ext regex tar untar

COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}

if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $( compgen -W 'c t x u r d A' -- $cur ) )
return 0
fi

case "${COMP_WORDS[1]}" in
##########L'ERREUR SERAIT ICI ???#####################
?(-)c*f)
#####################################################
_filedir
return 0
;;
+([^IZzjy])f)
ext='t@(ar?(.@(Z|gz|bz?(2)))|gz|bz?(2))'
regex='t\(ar\(\.\(Z\|gz\|bz2\?\)\)\?\|gz\|bz2\?\)'
;;
*[Zz]*f)
ext='t?(ar.)@(gz|Z)'
regex='t\(ar\.\)\?\(gz\|Z\)'
;;
*[Ijy]*f)
ext='t?(ar.)bz?(2)'
regex='t\(ar\.\)\?bz2\?'
;;
*)
_filedir
return 0
;;

esac

if "$COMP_LINE" == *$ext' '; then
# complete on files in tar file
#
# get name of tar file from command line
tar=$( echo "$COMP_LINE" | \
sed -e 's/^.* \([^ ]*'$regex'\) .*$/\1/' )
# devise how to untar and list it
untar=t${COMP_WORDS[1]//[^Izjyf]/}

COMPREPLY=( $( compgen -W "$( echo $( tar $untar $tar \
2>/dev/null ) )" -- "$cur" ) )
return 0
fi
0
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009
11 mars 2009 à 15:27
... et j'ajoute que connecté en root, la commande source /etc/bash_completion ne renvoie pas l'erreur
et j'ajoute enfin que si je ne suis pas connecté en root et que je lance la commande source /etc/bash_completion après avoir fait un su -p, ça renvoe le même message d'erreur que celui indiqué dans le post précédent.
J'avoue ne pas trop comprendre...
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
11 mars 2009 à 18:40
heu ... je me rend compte que je ne suis pas sûr d'avoir compris :

J'ai un répertoire /Denis et un répertoire /Denver

puis

le terminal ne me propose pas

/Denis /Denver



s'agit-il de 2 répertoires distincts ou bien du répertoire Denver situé dans le répertoire Denis ?
0
ebousquie Messages postés 40 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 28 avril 2009
12 mars 2009 à 10:11
Il s'agit bien sûr de 2 répertoires distincs situés au même niveau de l'arborescence. par exemple: /root/Denver et /root/Denis...
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 472
13 mars 2009 à 18:23
bon ben, "no comprendo" non plus !

sous la fedora 9, je n'ai pas de fichier /etc/bash_completion !

.. et pourtant la complétion fonctionne aussi bien pour mon user que pour root !

?
0
Wow! J'arrive un peu tard mais ça peut être utile.

/home/Denis/.bashrc
C'est le fichier rc qui comporte tout un tas de settings de ta session console tant que tu es loggué en tant que "Denis". À modifier à sa convenance.

/root/.bashrc
Idem mais cette fois-ci quand tu es loggué en root. Peut aussi être modifié à sa convenance.

/etc/skel/.bashrc
C'est un fichier par défaut qui servira de base, (de squelette "skel") quand on créera un nouvel utilisateur. Ce fichier sera copié dans /home/NouvelUtilisateur/.bashrc. Ce fichier ne devrait être modifié que si on souhaite que les paramètres de la session console soient répercutés sur tous les utilisateurs qui seront créés. C'est ce fichier qui a par exemple été copié vers /home/Denis/ au moment de la création de cet utilisateur.

Pour ton histoire de complétion : il est possible que tu n'utilises pas le même shell qu'avant : le comportement que tu souhaite ressemble à celui de Bash : tu es peut-être passé sous ksh ou un autre sans faire exprès. Voir le contenu de la variable d'environnement SHELL loggué sous Denis et sous root :
$ echo $SHELL
# echo $SHELL

Wikimig.
0