
Auf meiner Linux-Box habe ich in Bash Zugriff auf einen „Double Root“-Ordner, der durch zwei Schrägstriche gekennzeichnet ist:
tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls
bin/ cdrom@ ...
Der Inhalt des Ordners und seiner Unterordner ist identisch mit dem „normalen“ Stammverzeichnis mit einem Schrägstrich. Der doppelte Schrägstrich verschwindet nicht, wenn ich auf seine Unterordner zugreife. Die Anomalie wiederholt sich nicht mit drei oder mehr Schrägstrichen; dies sind einfache Synonyme für das Stammverzeichnis:
tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $
Was für ein Ort ist das? Ist das ein Fehler? Kann jemand die Anomalie erklären?
Antwort1
AusBash FAQ E10:
E10) Warum hinterlässt „cd //“ bei $PWD den Status „//“?
POSIX.2 sagt in seiner Beschreibung von 'cd', dassdreioder mehrere führende Schrägstriche können beim Kanonisieren des aktuellen Arbeitsverzeichnisses durch einen einzelnen Schrägstrich ersetzt werden.
Dies dient, wie ich annehme, der historischen Kompatibilität. Bestimmte Versionen von Unix und frühe Netzwerkdateisysteme verwendeten Pfade der Form //Hostname/Pfad, um auf „Pfad“ auf dem Server „Hostname“ zuzugreifen.
Antwort2
"Es ist kein Fehler, es ist ein Feature!"
Sie befinden sich immer noch im selben Stammverzeichnis. Ich kenne den Ursprung nicht, vermute aber, dass es etwas mit dem Erstellen von Zeichenfolgen für absolute Pfade zu tun haben könnte. Wenn es jemand anderes genau weiß, melden Sie sich.
Antwort3
Mehrere Schrägstriche werden von den von Ihnen verwendeten Tools einfach ignoriert und Sie gelangen immer zum selben Stammordner.
Antwort4
Mehrere Schrägstriche werden zur Pfadnamenauflösung als ein einzelner Schrägstrich behandelt.
Was Sie in der Shell-Eingabeaufforderung sehen, ist ein Artefakt der Bash-PS1-Verarbeitung (siehe Abschnitt „PROMPTING“ in der Bash-Manpage).
[root@linux /]# cd / ; echo $PWD
/
[root@linux /]# cd // ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/
Das Ergebnis ist nur eine Frage der Darstellung; Sie befinden sich immer im selben Stammverzeichnis. Sie können dies überprüfen, indem Sie sich ansehen /proc/$$/root
.
[Bearbeiten] Das wusste ich noch nicht: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 Die Bedeutung von "//" wird in den Standards nicht definiert, aber "///" und weitere Schrägstriche sind gleichwertig mit "/".