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 //?

Dimitris Theodoridis
quelle

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)?

Panther
quelle
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.

Hennes
quelle
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