web-dev-qa-db-fra.com

Pourquoi cd ~ k (& tab) se développe-t-il en cd ~ kernoops alors que j'ai déjà un dossier nommé "~ kernel-ppa" dans pwd?

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?

8
Aditya

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.

7
Benoit