Что значит // в пути?

9

Я работал в своем терминале, когда я неправильно написал время, cdчтобы получить root ( /). Случайно набрал //и попал в терминал:

root@weblocalhost://#

Когда я печатаю pwd, я получаю ответ, //но когда я печатаю , я получаю ls -sтот же список, что и в /каталоге.

Когда вы набираете больше 2, то есть ///вы получаете:

root@weblocalhost:/#

Всегда 1, /кроме 2. Есть ли разница и для чего //?

Димитрис Теодоридис
источник

Ответы:

8

/ эквивалентно //

Из спецификации POSIX (выделение добавлено):

3.267 Путь

Строка, используемая для идентификации файла. В контексте 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/, который может объяснить это.

Hennes
источник
Мой 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, но мне не удалось воспроизведите проблему.
Hennes
нет, я всегда получаю // при проверке pwd в любом случае. для эха $ PS1 я получаю: \ [\ e] 0; \ u @ \ h: \ w \ a \] $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $
Димитрис Теодоридис
Я просто вручную установил PS1 и не могу воспроизвести его двумя косыми чертами. Weird. Не с 1, 3 или 4. Только с 2. Я затрудняюсь объяснить это.
Hennes
Возможно, этот комментарий от unix.stackexchange является ответом: я считаю, что Windows POSIX compat API также будет обрабатывать // remote / ... так же, как формат UNC path \\ remote \ .... - Стивен П. 20 января '11 в 0:39
Хеннес