Que signifie // dans un chemin?

9

Je travaillais dans mon terminal, quand j'ai mal orthographié alors que cdroot ( /). Par accident, j'ai tapé //et je suis entré dans le terminal:

root@weblocalhost://#

Quand je tape pwd, j'obtiens une réponse //mais quand je tape ls -sj'ai la même liste que dans le /répertoire.

Lorsque vous tapez plus de 2, c'est- ///à- dire vous obtenez:

root@weblocalhost:/#

Toujours 1 /sauf pour 2. Y a-t-il une différence et à quoi ça sert //?

Dimitris Theodoridis
la source

Réponses:

8

/ est équivalent à //

De la spécification POSIX (soulignement ajouté):

3.267 Nom de chemin

Chaîne utilisée pour identifier un fichier. Dans le contexte de POSIX.1-2008, un chemin d'accès peut être limité à {PATH_MAX} octets, y compris l'octet nul final. Il a des <slash> caractères de début facultatifs , suivis de zéro ou plusieurs noms de fichiers séparés par des <slash> caractères. Un nom de chemin peut éventuellement contenir un ou plusieurs <slash>caractères de fin . Plusieurs <slash>caractères successifs sont considérés comme identiques à un <slash>, sauf dans le cas d'exactement deux <slash>caractères de tête .

Et :

4.12 Résolution du nom de chemin

...
Un chemin d'accès composé d'un seul <slash>doit être résolu dans le répertoire racine du processus. Un nom de chemin nul ne doit pas être résolu avec succès. Si un nom de chemin commence par deux <slash>caractères successifs , le premier composant suivant les <slash>caractères de tête peut être interprété d'une manière définie par l'implémentation, bien que plus de deux <slash>caractères de tête doivent être traités comme un seul <slash> caractère.

Pour une discussion intéressante sur les exceptions (cygwin et répertoires), voir: Comment Linux gère-t-il plusieurs séparateurs de chemin consécutifs (/ home //// nom d'utilisateur /// fichier)?

Panthère
la source
4

Vous pouvez ajouter plusieurs barres obliques à un répertoire et cela ne changera rien.

Par exemple, ces trois commandes font toutes la même chose:
cd /home
cd /home/
cd /home//

Après l'un de ceux-ci, mon répertoire de travail actuel est défini sur / home (vérifiez avec pwd).

Je suppose que votre invite est configurée pour faire quelque chose d'intelligent et que vous avez rencontré un comportement imprévu. Qu'obtenez-vous quand vous echo $PS1?

Lien vers un commentaire sur https://unix.stackexchange.com/ qui peut l'expliquer.

Hennes
la source
Ma PS1 en bash sur OSX est "\ h: \ W \ u \ $" et j'obtiens aussi ce comportement étrange. / et /// et //// et ///// apparaissent tous comme /, mais le cas particulier de deux barres obliques apparaît comme deux barres obliques.
Sparr
J'ai obtenu le \ u @ \ h: \ w (<b> u </b> ser à <b> h </b> ost, <b> w </b> orking dir) dans Ubuntu 12.10 mais je ne parviens pas à reproduire le problème.
Hennes
non je reçois toujours // quand je vérifie pwd dans tous les cas. pour echo $ PS1 j'obtiens: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Dimitris Theodoridis
Je viens de régler manuellement ma PS1 et je ne peux pas la reproduire avec deux barres obliques. Bizarre. Pas avec 1, 3 ou 4. Seulement avec 2. Je suis incapable d'expliquer cela.
Hennes
Peut-être que ce commentaire de unix.stackexchange est la réponse: je crois que les API compatibles Windows POSIX traiteront également // remote / ... de la même manière que le chemin UNC \\ remote \ ... format. - Stephen P 20 janvier 11 à 0:39
Hennes