J'ai un dossier nommé ~kernel-ppa
à l'intérieur de ~/Downloads
.
aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa
Maintenant, quand je tape cd ~k
et que je presse Tab pour une expansion automatique, le Shell l'étend à cd ~kernoops/
au 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'extension automatique fonctionne, je dois m'échapper avec \
. Ainsi, en utilisant cd \~k
et en appuyant sur Tab étend correctement à cd \~kernel-ppa/
. Même en utilisant cd \
et en appuyant sur Tab fait le tour.
Pourquoi est-ce vrai et pourquoi dois-je m'échapper? De plus, qu'est-ce que je m'échappe puisque même ~
n'est pas requis pour l'expansion automatique?
Si je suis avec le flux et lancez cd ~kernoops/
et appuyez sur Enter, le statut 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
indique qu'il s'agit de //
. Qu'est-ce que c'est exactement?
Le caractère tilde (~
) a une signification spéciale dans le shell. Quand il est vu dans n'importe quelle commande, il est développé avec le nom de votre répertoire personnel. Faire cd ~
ou cd /home/aditya
est la même chose, cela finit dans votre répertoire personnel.
En plaçant un caractère barre oblique inverse (\
) devant le tilde, vous indiquez au shell de ne pas développer le caractère spécial suivant (c'est ce que l'on appelle un échappement de shell). En faisant cd \~
, vous demandez au shell de passer à un répertoire appelé ~
qui se trouverait dans le répertoire dans lequel vous exécutez la commande. Ainsi, si vous exécutez cd \~kernel-ppa
, vous obtiendrez le répertoire appelé ~kernel-ppa
, qui correspond au comportement normal.
édité: plus sur ~
Si vous écrivez un nom d'utilisateur de votre système après le ~
, vous êtes déplacé vers le répertoire de base de cet utilisateur. Faire un Tab l'expansion après cd ~
s'étendra aux noms d'utilisateur existants sur votre système. Si fais Tab achèvement après cd ~k
, il se développe en ~ kernoops car il existe un utilisateur nommé kernoops dans l’utilisateur système, avec un répertoire personnel de /
. Au fur et à mesure que l'expansion de cd ~k
aboutit à cd ~kernoops/
avec un slash de fin et que le répertoire de base est /
, vous êtes déplacé vers //
. Mais ceci est strictement identique à /
comme certains l’ont déjà dit plus tôt.