Co // oznacza na ścieżce?


9

Pracowałem w swoim terminalu, kiedy popełniłem błąd podczas cdrootowania ( /). Przypadkowo wpisałem //i dostałem terminal:

root@weblocalhost://#

Kiedy piszę pwd, otrzymuję odpowiedź, //ale kiedy piszę, ls -smam taką samą listę jak w /katalogu.

Gdy wpiszesz więcej niż 2, tzn. ///Otrzymasz:

root@weblocalhost:/#

Zawsze 1 /z wyjątkiem 2. Czy jest jakaś różnica i do czego służy //?

Odpowiedzi:


8

/ jest równa //

Ze specyfikacji POSIX (wyróżnienie dodane):

3.267 Nazwa ścieżki

Ciąg używany do identyfikacji pliku. W kontekście POSIX.1-2008 nazwa ścieżki może być ograniczona do bajtów {PATH_MAX}, w tym kończącego bajtu zerowego. Ma opcjonalne początkowe <slash> znaki, po których następuje zero lub więcej nazw plików oddzielonych <slash> znakami. Nazwa ścieżki może opcjonalnie zawierać jeden lub więcej końcowych <slash>znaków. Wiele kolejnych <slash>znaków jest uważanych za takie same jak jeden <slash>, z wyjątkiem przypadku dokładnie dwóch wiodących <slash>znaków.

I :

4.12 Rozpoznawanie nazw ścieżek

...
Ścieżka składająca się z pojedynczej nazwy <slash>powinna zostać przeniesiona do katalogu głównego procesu. Ścieżka zerowa nie może zostać pomyślnie rozwiązana. Jeżeli nazwa ścieżki zaczyna się od dwóch kolejnych <slash>znaków, pierwszy składnik następujący po <slash>znakach wiodących można interpretować w sposób zdefiniowany w implementacji, chociaż więcej niż dwa <slash>znaki wiodące należy traktować jako pojedynczy <slash> znak.

Aby uzyskać przyjemną dyskusję na temat wyjątków (cygwin i katalogi), zobacz: Jak linux obsługuje wiele kolejnych separatorów ścieżek (plik / home //// nazwa użytkownika ///)?


4

Możesz dodać wiele ukośników do katalogu i nic to nie zmieni.

Np. Wszystkie trzy polecenia robią to samo:
cd /home
cd /home/
cd /home//

Po którymkolwiek z nich mój bieżący katalog roboczy jest ustawiony na / home (sprawdź za pomocą pwd).

Wydaje mi się, że masz skonfigurowane polecenie, by zrobić coś inteligentnego i że wpadłeś w nieoczekiwane zachowanie. Co dostajesz, kiedy jesteś echo $PS1?

Link do komentarza na https://unix.stackexchange.com/, który może to wyjaśnić.


Moje PS1 w bash na OSX to „\ h: \ W \ u \ $” i mam też takie dziwne zachowanie. / i /// i //// i ///// są wyświetlane jako /, ale specjalny przypadek dwóch ukośników jest wyświetlany jako dwa ukośniki.
Sparr

Mam \ u @ \ h: \ w (<b> u </b> ser w <b> h </b> ost, <b> w </b> orking dir) w Ubuntu 12.10, ale nie udało mi się odtworzyć problem.
Hennes

nie, zawsze dostaję // podczas sprawdzania pwd. za echo $ PS1 dostaję: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Dimitris Theodoridis

Właśnie ustawiłem ręcznie PS1 i nie mogę go odtworzyć z dwoma ukośnikami. Dziwne. Nie z 1, 3 lub 4. Tylko z 2. Nie mogę tego wyjaśnić.
Hennes

Może ten komentarz unix.stackexchange jest odpowiedzią: Wierzę, że interfejsy API
Hennes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.