Co to jest katalog „//”?

12

Na różnych maszynach z linuksem możesz

cd /

i

cd //

Powłoka powie, że bieżącym katalogiem jest „/” lub „//” po użyciu odpowiedniej komendy.

Pytanie brzmi zatem: jaka jest różnica między „/” a „//”, a jeśli odpowiedź brzmi „bez różnicy”, to dlaczego „//” jest pokazane inaczej niż „/”

BTW

cd ///
cd ////
cd /////

Wszystkie wyniki w powłoce mówią, że bieżący katalog to „/”

Oto przykładowa sesja:

[user@host /]$ cd //
[user@host //]$ cd /
[user@host /]$ cd //
[user@host //]$ cd /
[user@host /]$
sylvanaar
źródło
2
To wydaje się być anomalią specyficzną dla bash. Jeśli spróbujesz cd //w csh lub zsh, a wtedy pwdpokaże się tylko „/”
Doug Harris,
ciekawe - rzuca na to trochę światła
sylvanaar
1
Dla porównania: cd //usr/bindaje „// usr / bin”, ale cd /usr//bindaje „/ usr / bin” (w Bash).
Wstrzymano do odwołania.

Odpowiedzi:

14

Zapytajmy samego mężczyznę (Chester Ramey):

E10) Dlaczego „cd //” pozostawia $ PWD jako „//”?

POSIX.2 w opisie „cd” mówi, że trzy lub więcej wiodących ukośników można zastąpić jednym ukośnikiem podczas kanonizacji bieżącego katalogu roboczego.

Jest to, jak sądzę, zgodność historyczna. Niektóre wersje Uniksa i wczesne sieciowe systemy plików korzystały ze ścieżek w postaci // nazwa_hosta / ścieżka, aby uzyskać dostęp do „ścieżki” na serwerze „nazwa hosta”.

Wstrzymano do odwołania.
źródło
Znacznie lepsza odpowiedź niż (już całkiem dobra) John T.
innaM
9

To nie jest rzeczywisty katalog, to problem związany z bash. Jest o nim mowa w The Linux Documentation Project .

John T.
źródło
4
dlaczego nikt tego nie naprawił? czy oni?
sylvanaar