7

В bash, если вы перейдете на //, ваш pwd будет //, но если вы перейдете на / или ///+, то ваш pwd будет /. Есть ли причина для этого или это просто странная ошибка?

Я пробовал это в OSX и Ubuntu.

2 ответа2

8

Из Bash FAQ:

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

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

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

0

Хотя ответ был правильным на данных, которые он дал, он не совсем ответил на заданный вопрос.

Оболочка нормализует путь. Оно делает:

  • изменить любые компоненты part1/part2/.. на part1/
  • изменить любые //+ компоненты на /

Вы можете проверить это с помощью strace, которая увидит, что фактически передается в системный вызов

strace -o /tmp/strace.out bash -c "cd ///tmp"
grep chdir /tmp/strace.out
# will give chdir("/tmp")

strace -o /tmp/strace.out bash -c "cd ///tmp/../etc"
grep chdir /tmp/strace.out
# will give chdir("/etc")

Оболочка выполняет нормализацию пути еще до того, как она скажет системе изменить каталог

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .