Podwójny folder główny vs pojedynczy folder główny

14

Na moim Linux-ie, w bash, mam dostęp do folderu „double root” oznaczonego dwoma ukośnikami:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

Zawartość folderu i jego podfolderu jest identyczna z „normalnym” pojedynczym ukośnikiem. Podwójny ukośnik nie znika, gdy uzyskuję dostęp do jego podfolderów. Anomalia nie powtarza się z trzema lub więcej ukośnikami; są to proste synonimy dla katalogu głównego:

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

Jakie to miejsce? Czy to błąd? Czy ktoś może wyjaśnić anomalię?

Tomas
źródło
dobre pytanie - zauważyłem to samo zachowanie, ale nigdy nie zapytałem, dlaczego tak się dzieje.
lajuette

Odpowiedzi:

18

Z Bash FAQ E10 :

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
1
Domena / system operacyjny jest jednym z takich systemów.
user1686
1
Funkcja podwójnego cięcia jest nadal używana. Jest częścią Universal (lub Uniform; wydaje się, że nie mogę znaleźć głównego źródła) Naming Convention lub UNC. Pojawia się w systemach Windows, Unix i Linux. Zdarza się, że podwójny ukośnik jest używany w adresach URL.
Isaac Rabinovitch,
1

"To nie jest błąd, to jest funkcja!"

Nadal jesteś w tym samym katalogu głównym. Nie wiem, skąd się to wzięło, ale podejrzewam, że może to mieć coś wspólnego z budowaniem ciągów dla absolutnych ścieżek. Jeśli ktokolwiek wie na pewno, zrób porządek.

MBraedley
źródło
0

Wiele ukośników jest po prostu ignorowanych przez narzędzia, których użyłeś i zawsze dochodzisz do tego samego folderu głównego.

ocsid80
źródło
Dlaczego więc bash zmienia /// w / podczas pozostawiając // bez zmian?
Tomas
0

Wiele ukośników jest traktowanych jako pojedynczy ukośnik do celów rozpoznawania nazw ścieżek.

To, co widzisz w zachęcie powłoki, to artefakt obsługi bash PS1 (zobacz sekcję „PROMPTING” na stronie podręcznika bash).

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

Wynik jest tylko kwestią prezentacji; zawsze jesteś w tym samym katalogu głównym. Możesz to sprawdzić, patrząc na /proc/$$/root.

[edytuj] Cóż, nigdy tego nie wiedziałem: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 Znaczenie „//” nie jest zdefiniowane przez standardy, ale „///” a więcej ukośników jest równoważnych z „/”.

Phil
źródło