Doppelter Stammordner vs einzelner Stammordner


14

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 seines Unterordners ist identisch mit dem "normalen" Single Slash Root. Der doppelte Schrägstrich verschwindet nicht, wenn ich auf seine Unterordner zugreife. Die Annomalie wiederholt sich nicht mit drei oder mehr Schrägstrichen; Dies sind einfache Synonyme für die Wurzel:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

Was für ein Ort ist das? Ist es ein Bug? Kann jemand die Annomalie erklären?


gute frage - ich habe das gleiche verhalten bemerkt, aber nie gefragt, warum das passiert.
Lajuette

Antworten:


18

Aus Bash FAQ E10 :

E10) Warum lässt 'cd //' $ PWD als '//'?

POSIX.2 in der Beschreibung von 'cd' besagt, dass drei oder mehr führende Schrägstriche durch einen einzelnen Schrägstrich ersetzt werden können, wenn das aktuelle Arbeitsverzeichnis kanonisiert wird.

Ich nehme an, dies dient der historischen Kompatibilität. Bestimmte Versionen von Unix und früheren Netzwerkdateisystemen verwendeten Pfade der Form // Hostname / Pfad, um auf 'Pfad' auf dem Server 'Hostname' zuzugreifen.


1
Domain / OS ist ein solches System.
user1686

1
Der doppelte Schrägstrich wird immer noch verwendet. Es ist Teil der Universal- (oder Uniform-; ich kann anscheinend keine Primärquelle finden) Namenskonvention oder der UNC. Es wird unter Windows, Unix und Linux angezeigt. Dies ist der Grund, warum in URLs ein doppelter Schrägstrich verwendet wird.
Isaac Rabinovitch

1

"Es ist kein Fehler, es ist ein Feature!"

Sie befinden sich immer noch im selben Stammverzeichnis. Ich weiß nicht, woher das kommt, aber ich vermute, dass es etwas damit zu tun hat, Zeichenfolgen für absolute Pfade zu erstellen. Wenn jemand anderes sicher weiß, meldet euch.


0

Mehrere Schrägstriche werden von den von Ihnen verwendeten Tools einfach ignoriert und Sie gelangen immer zum gleichen Stammordner.


Warum ändert sich die Bash /// in /, während // so bleibt wie sie ist?
Tomas

0

Mehrere Schrägstriche werden aus Gründen der Pfadnamenauflösung als ein Schrägstrich behandelt.

Was Sie in der Shell-Eingabeaufforderung sehen, ist ein Artefakt der Bash-PS1-Handhabung (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 Präsentation; Sie befinden sich immer im selben Stammverzeichnis. Sie können dies überprüfen, indem Sie auf /proc/$$/root.

[edit] Nun, ich wusste das nie: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 Die Bedeutung von "//" wird von den Standards nicht definiert, aber "///" und weitere Schrägstriche entsprechen "/".

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.