Was bedeutet // in einem Pfad?


9

Ich habe in meinem Terminal gearbeitet, als ich bei cdroot ( /) falsch geschrieben habe . Aus Versehen habe ich getippt //und bin ins Terminal gekommen:

root@weblocalhost://#

Wenn ich tippe pwd, bekomme ich eine Antwort, //aber wenn ich tippe , bekomme ich ls -sdie gleiche Liste wie im /Verzeichnis.

Wenn Sie mehr als 2 eingeben, erhalten ///Sie:

root@weblocalhost:/#

Immer 1 /außer 2. Gibt es einen Unterschied und wofür //?

Antworten:


8

/ ist äquivalent zu //

Aus der POSIX-Spezifikation (Hervorhebung hinzugefügt):

3.267 Pfadname

Eine Zeichenfolge, mit der eine Datei identifiziert wird. Im Kontext von POSIX.1-2008 kann ein Pfadname auf {PATH_MAX} Bytes beschränkt sein, einschließlich des abschließenden Nullbytes. Es hat optionale Anfangszeichen <slash> , gefolgt von null oder mehr Dateinamen, die durch <slash> Zeichen getrennt sind . Ein Pfadname kann optional ein oder mehrere nachfolgende <slash>Zeichen enthalten. Mehrere aufeinanderfolgende <slash>Zeichen gelten als dasselbe wie eines <slash>, mit Ausnahme von genau zwei führenden <slash>Zeichen.

Und :

4.12 Pfadnamenauflösung

...
Ein Pfadname, der aus einem einzelnen <slash>besteht, wird in das Stammverzeichnis des Prozesses aufgelöst. Ein Nullpfadname wird nicht erfolgreich aufgelöst. Wenn ein Pfadname mit zwei aufeinanderfolgenden <slash>Zeichen beginnt , kann die erste Komponente nach den führenden <slash>Zeichen implementierungsdefiniert interpretiert werden, obwohl mehr als zwei führende <slash>Zeichen als ein einziges <slash> Zeichen behandelt werden sollen .

Eine ausführliche Beschreibung der Ausnahmen (Cygwin und Verzeichnisse) finden Sie unter: Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/ home //// Benutzername /// Datei)?


4

Sie können einem Verzeichnis mehrere Schrägstriche hinzufügen, ohne dass sich daran etwas ändert.

ZB machen diese drei Befehle alle dasselbe:
cd /home
cd /home/
cd /home//

Danach wird mein aktuelles Arbeitsverzeichnis auf / home gesetzt (überprüfen mit pwd).

Ich vermute, dass Sie Ihre Eingabeaufforderung so konfiguriert haben, dass sie etwas Kluges tut, und dass Sie auf unerwartetes Verhalten gestoßen sind. Was bekommst du wenn du echo $PS1?

Link zu einem Kommentar auf /unix//, der dies möglicherweise erklärt.


Meine PS1 in Bash unter OSX ist "\ h: \ W \ u \ $" und ich bekomme auch dieses seltsame Verhalten. / und /// und //// und ///// werden alle als / angezeigt, aber der Sonderfall von zwei Schrägstrichen wird als zwei Schrägstriche angezeigt.
Sparr

Ich habe das \ u @ \ h: \ w (<b> u </ b> ser bei <b> h </ b> ost, <b> w </ b> orking dir) in Ubuntu 12.10, aber ich kann nicht reproduzieren Sie das Problem.
Hennes

nein ich bekomme immer // wenn ich pwd auf jeden fall überprüfe. für echo $ PS1 bekomme ich: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Dimitris Theodoridis

Ich habe meine PS1 nur manuell eingestellt und kann sie nicht mit zwei Schrägstrichen reproduzieren . Seltsam. Nicht mit 1, 3 oder 4. Nur mit 2. Ich kann das nicht erklären.
Hennes

Vielleicht ist dieser Kommentar von unix.stackexchange die Antwort: Ich glaube, dass Windows POSIX-kompatible APIs auch // remote / ... genauso behandeln wie das UNC-Pfad \\ remote \ ... Format. - Stephen P 20. Januar 11 um 0:39
Hennes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.