J'ai un dossier nommé à l' ~kernel-ppa
intérieur ~/Downloads
.
aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa
Maintenant, lorsque je tape cd ~k
et appuie sur Tabpour l'expansion automatique, le shell le développe au cd ~kernoops/
lieu de cd ~kernel-ppa/
bien que le dossier avec les mêmes caractères de départ soit déjà présent.
Pour que l'expansion automatique fonctionne, je dois y échapper \
. Ainsi, le fait d'utiliser cd \~k
et d'appuyer Tabcorrectement le développe cd \~kernel-ppa/
. Même l'utilisation cd \
et la pression Tabfont l'affaire.
Pourquoi en est-il ainsi et pourquoi dois-je m'échapper? De plus, qu'est-ce que j'échappe puisque même ~
n'est pas requis pour l'expansion automatique?
Si je continue avec le flux et que j'exécute cd ~kernoops/
et que j'appuie sur Enter, l'état du terminal devient //
:
aditya@aditya-desktop:~/Downloads$ cd ~kernoops/
aditya@aditya-desktop://$ pwd
//
aditya@aditya-desktop://$ ls
bin cdrom etc initrd.img lost+found mnt proc run srv tmp var
boot dev home lib media opt root sbin sys usr vmlinuz
aditya@aditya-desktop://$
Cela ressemble au /
répertoire, mais pwd
dit qu'il l'est //
. C'est quoi exactement?
la source
tree
ou avecls
et vous remarquerez que c'est le premier sous-dossier.~kernel-ppa
c'est le seul dossier à l'intérieur; si je viens d'exécutercd
et d'appuyer sur tab, il se développecd \~kernel-ppa/
. Je n'ai pas besoin de m'échapper aussi!Réponses:
Comme vous le savez, se
~
développe dans votre répertoire personnel. Mais ce que vous semblez avoir manqué, c'est qu'il se~john
développe dans le répertoire personnel de l'utilisateur nommé "john".Vérifiez votre
/etc/passwd
dossier:Il a un "utilisateur système" nommé
kernoops
(pour des raisons internes de rapport de bogue). Ainsi, lorsque vous tapezcd ~k
Table shell, vous donnez la préférence (1) à l'expansion du nom d'utilisateur avant l'expansion des répertoires locaux, et vous l'avezcd ~kernoops
. Maintenant, il en résulte que le répertoire personnel de l'utilisateur "kernoops" est/
, donc c'estcd
à lui.Dans ma coquille,
zsh
je n'ai pas de double barre oblique (2):Soit dit en passant, ce nom de répertoire n'est pas bien pensé. Il aura besoin d'un triple soin dans les scripts et autres. La seule pire idée que je puisse penser est d'y insérer un onglet ...
Notes de bas de page:
(1) Dans
zsh
, même si j'ai un répertoire nommé~xdir
et aucun utilisateur ne commence parx
; fairecd ~x
Tabne se développe pas et ne cite pas l'~
erreur donne:(2) Je semble me souvenir que le posix a fait une exception pour l'initiale
//
dans un chemin --- il devrait être maintenu parce qu'une vieille variante unix (j'ai utilisé les apollos avec Domain / OS qui en disposaient)//machine-name/...
pour accéder en toute transparence à d'autres machines '' système de fichiers dans le réseau local (la sécurité n'a pas encore été inventée). Donc, bash est probablement ici. Si vous le faites,cd ///
vous aurez cependant la normale/
dans les deux coques.Oui, trouvé sur unix.se !
la source
Le caractère tilde (
~
) a une signification particulière dans le shell. Lorsqu'il apparaît dans n'importe quelle commande, il est étendu au nom de votre répertoire personnel. Fairecd ~
oucd /home/aditya
c'est la même chose, il se retrouve dans votre répertoire personnel.En plaçant un caractère barre oblique inverse (
\
) devant le tilde, vous dites au shell de ne pas faire l'expansion du caractère spécial suivant (c'est ce que l'on appelle l'échappement du shell). En faisant cela,cd \~
vous demandez au shell de se déplacer vers un répertoire appelé~
qui serait situé sous le répertoire dans lequel vous exécutez la commande. Ainsicd \~kernel-ppa
, vous passerez au répertoire appelé~kernel-ppa
, qui est le comportement normal.EDITÉ: plus sur ~
Si vous écrivez un nom d'utilisateur de votre système après le
~
, vous êtes déplacé vers le répertoire personnel de cet utilisateur. Faire une Tabextension aprèscd ~
étendra aux noms d'utilisateurs existants sur votre système. Si vous terminez Tabaprèscd ~k
, il se développe en ~ kernoops car il y a un utilisateur nommé kernoops dans l'utilisateur système, avec un répertoire personnel de/
. Comme l'expansion descd ~k
résultatscd ~kernoops/
avec une barre oblique de fin et le répertoire personnel étant/
, vous êtes déplacé vers//
. Mais c'est strictement le même/
que certains autres l'ont déjà dit plus tôt.la source