J'ai installé une variable dans .bashrc
:
export SOME_DIR=/path/to/some/dir
Maintenant, avec ls
je peux taper ls $SOME_DIR[tab]
et la variable sera étendue, et je peux ensuite utiliser l'onglet pour l'auto-complétion quand je vais plus loin dans le système de files. Cependant, si j'essaye cd $SOME_DIR[tab]
ou cd $SOME_DIR/[tab]
, rien ne se passe.
Pourquoi cela ne fonctionne-t-il qu'avec ls
? Est-il possible de le faire fonctionner avec cd
?
J'ai essayé d'append shopt -s direxpand
à .bashrc
, sans effet:
Dans Cygwin, j'ai eu le même problème et j'ai dû inclure la variable shell entre guillemets. Donc, par exemple, cd $ccc
ne serait pas développé mais cd "$ccc"
serait, et votre slider est toujours avant la citation de droite.
Peut-être que vous n'avez pas de directorys dans /path/to/some/dir/
? Je viens d'essayer cd $SOME_DIR/[tab]
sur mon système et cela a fonctionné.
La seule façon d'étendre la variable pour moi est d'append une barre oblique à la fin de celui-ci:
$ cd $SOME_DIR[tab] ## fails $ cd $SOME_DIR/[tab] ## works
J'ai exactement le même comportement avec cd
ou ls
. Pourriez-vous avoir ajouté la barre oblique et fogoten dans l'autre?
Apparemment shopt -s direxpand
fonctionne avec tout sauf le cd
embedded. Donc, je viens d'append alias xy=cd
à mon profil, et xy
fonctionne comme cd
sauf direxpand
fonctionne en utilisant TAB. (Qui aurait pensé que ce serait si simple?)
J'ai presque le même problème avec (old) bash 4.2.37, pas avec bash 4.3 ou 4.4.
C'est-à-dire: l'extension fonctionne avec ls
mais pas avec cd
.
Cependant, comme aide-keyboard, j'ai défini (d'après S Pand):
Ctrl – s dans mon
~/.inputrc
:
Control-s: shell-expand-line
Cela me permet de taper: cd $SOME_DIR
puis Ctrl cd $SOME_DIR
pour get la variable étendue à:
cd /path/to/some/dir
Une binding qui est tout aussi utile est (de G lobbing):
Ctrl – g aussi dans mon
~/.inputrc
:
Control-g: glob-expand-word
Cela me permet de taper ls b*
puis Ctrl – g pour get le b*
étendu:
$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd> $ ls bash.html_node.tar.gz bash.pdf
Ce qui me permet également de modifier la command line et d'append ou supprimer des éléments si nécessaire.