Що // означає в шляху?


9

Я працював у своєму терміналі, коли неправильно написав, поки cdвикорінював ( /). Випадково я набрав //і потрапив у термінал:

root@weblocalhost://#

Коли я набираю pwd, я отримую відповідь, //але коли я набираю, ls -sя отримав такий же список, як у /каталозі.

Коли ви набираєте більше 2, тобто ///ви отримуєте:

root@weblocalhost:/#

Завжди 1, /крім 2. Чи є різниця і для чого //?

Відповіді:


8

/ еквівалентно //

З специфікації POSIX (наголос додано):

3.267 Ім'я Pathname

Рядок, який використовується для ідентифікації файлу. У контексті POSIX.1-2008 ім'я контуру може бути обмежено до {PATH_MAX} байт, включаючи кінцевий нульовий байт. Він має необов'язкові початкові <slash> символи, за якими слідує нуль або більше імен файлів, розділених <slash> символами. Ім'я шляху може необов'язково містити один або декілька <slash>символів, що відкладаються . Кілька послідовних <slash>символів вважаються такими ж, як один <slash>, за винятком випадків, коли саме два провідні <slash>символи.

І :

4.12 Роздільна здатність імені

...
Ім'я шляху, що складається з одного, <slash>має відповідати кореневому каталогу процесу. Недійсне ім'я шляху не вдалося вирішити. Якщо ім'я шляху починається з двох послідовних <slash>символів, перший компонент, що слідує за провідними <slash>символами, може бути інтерпретований у визначеному реалізацією способі, хоча більше двох провідних <slash>символів розглядаються як один <slash> символ.

Для приємного обговорення винятків (cygwin та каталоги) дивіться: Як Linux обробляє декілька послідовних роздільників шляхів (/ home //// username /// file)?


4

Ви можете додати декілька косої риски до каталогу, і це нічого не змінить.

Наприклад, ці три команди виконують те саме:
cd /home
cd /home/
cd /home//

Після будь-якого з цих моїх поточних робочих каталогів встановлюється значення / home (перевірити pwd).

Я здогадуюсь, що у вас підказки налаштовані робити щось розумне, і ви зіткнулися з непередбачуваною поведінкою. Що ви отримуєте, коли echo $PS1?

Посилання на коментар на https://unix.stackexchange.com/, який може пояснити це.


Мій PS1 в bash на OSX - це "\ h: \ W \ u \ $", і я отримую і цю дивну поведінку. / і /// і //// та ///// всі відображаються як /, але особливий випадок двох передніх косих фігур відображається як два передніх косих.
Спарр

Я отримав \ u @ \ h: \ w (<b> u </b> ser в <b> h </b> ost, <b> w </b> orking dir) в Ubuntu 12.10, але мені не вдалося відтворити проблему.
Геннес

ні, я завжди отримую // під час перевірки pwd у будь-якому випадку. для echo $ PS1 я отримую: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Димитріс Теодорідіс

Я просто вручну встановив свій PS1 і не можу відтворити його з двома нахилами. Дивно. Не з 1, 3 або 4. Тільки з 2. Мені не вдається пояснити це.
Геннес

Можливо, цей коментар від unix.stackexchange є відповіддю: я вважаю, що API-
Hennes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.