Что такое каталог «//»?

12

На разных машинах Linux вы можете

cd /

и

cd //

Оболочка скажет, что текущим каталогом является «/» или «//» после использования соответствующей команды.

Таким образом, вопрос: в чем разница между «/» и «//», и если ответ «нет разницы», то почему «//» отображается иначе, чем «/»

КСТАТИ

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

Все результаты в оболочке говорят, что текущий каталог '/'

Вот пример сеанса:

[user@host /]$ cd //
[user@host //]$ cd /
[user@host /]$ cd //
[user@host //]$ cd /
[user@host /]$
Сильванаар
источник
2
Это похоже на аномалию, специфичную для bash. Если вы попробуете cd //в csh или zsh, и тогда pwdон покажет просто '/'
Даг Харрис
интересно - это проливает свет на это
sylvanaar
1
Для сравнения: cd //usr/binвыдает "// usr / bin", но cd /usr//binвыдает "/ usr / bin" (в Bash).
Приостановлено до дальнейшего уведомления.

Ответы:

14

Давайте спросим самого человека (Честер Рами):

E10) Почему «cd //» оставляет $ PWD как «//»?

POSIX.2 в своем описании 'cd' говорит, что три или более начальных слеша могут быть заменены одним слешем при канонизации текущего рабочего каталога.

Это, я полагаю, для исторической совместимости. Некоторые версии Unix и ранние сетевые файловые системы использовали пути в форме // имя хоста / путь для доступа к «пути» на сервере «имя хоста».

Приостановлено до дальнейшего уведомления.
источник
Гораздо лучший ответ, чем (уже довольно хороший) от Джона Т.
innaM
9

Это не настоящий каталог, это проблема, специфичная для bash. На него есть ссылка в Проекте документации Linux .

Джон Т
источник
4
почему никто не исправил это? или они?
Сильванаар