Completion avec tabulation dans le terminal
ebousquie
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
Wikimig -
Wikimig -
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
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:
- Tabulation linux
- Tabulation word - Guide
- Linux reader - Télécharger - Stockage
- Toutou linux - Télécharger - Systèmes d'exploitation
- Code ascii tabulation ✓ - Forum Programmation
- Émulateur linux ✓ - Forum Linux / Unix
12 réponses
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.
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.
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.
/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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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!)...
# 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!)...
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 ...
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 ...
avant de regarder le fichier inputrc (bien qu'il soit intéressant) :
as-tu fais un :
as-tu fais un :
source /etc/bash_completion
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
>> 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
... 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...
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...
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 ?
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 ?
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...
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 !
?
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 !
?
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.
/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.