Когда я хочу вернуться в каталог верхнего уровня в Linux, набрав cd ..
, я набираю текст cd //
. К моему большому удивлению, об ошибках не сообщается. Более того, подсказка становится username@hostname://$
. ls
указывает, что я сейчас в корневом каталоге.
Это ошибка или особенность оболочки? Если функция, //
псевдоним /
? Моя оболочка - GNU bash, версия 4.1.5 (1) -релиз (i686-linux-gnu).
Спасибо и всего наилучшего.
Ответы:
Это можно рассмотреть либо.
В Linux
//
это ничего не значит - несколько последовательных слешей сворачиваются в один, где угодно на пути, включая начало. Смена директории на//
вас/
, как показалоreadlink /proc/self/cwd
бы выполнение; аналогично,/usr//local///bin
рушится/usr/local/bin
.Однако некоторые другие Unix-подобные системы, например Cygwin или старая Apollo Domain / OS, используют
//
префикс для сетевых путей, таких как//fileserver/path/to/data
. POSIX также позволяет это.По разным причинам оболочка bash самостоятельно отслеживает текущий каталог (в дополнение к отслеживанию, предоставляемому операционной системой), и в нем есть код, который предотвращает
//
свертывание исходного файла и остается совместимым с такими системами. «Особенность» заключается в том, что bash обеспечивает более интуитивное отслеживание текущего каталога, например, когда выcd
переходите по символической ссылке, bash покажет вам ожидаемый путь, даже если ядро думает иначе. «Ошибка» в том, что bash разрешает//
даже в системах, которые его не используют.источник
zsh
позволяетcd //
, но достаточно умен, чтобы просто показать/
в строке приглашения.Из определения пути POSIX:
Источник
А точнее, как упомянутое в его комментарии ниже, из главы 4.11 о разрешении имен путей:
источник
Это своего рода особенность. Если у вас запущен и используется скрипт оболочки
find
, например, все пути имеют префикс ./ обычно. Затем, если вы добавите его к фактическому пути, он станет `/my/path/./appended/path, который преобразуется в / my / path / appended / path. Так что, если я не ошибаюсь, // get интерпретируется как /./ и, следовательно, /. Это то же самое, что если вы зашли в / home / user //, вы попали бы в / home / user /источник
Я бы пошел для быстрого отображения «ошибка».
Любые пути "/", "//", "//////////////////////", ... имеют одинаковое значение: "/". Вы можете добавить столько «/», сколько хотите в пути Unix, это не изменит его значения.
«Ошибка» здесь больше связана с тем, что ваша подсказка использует для отображения последний действительный введенный путь, а не фактический «pwd».
Смешно в любом случае;)
источник
//
в приглашении есть побочный эффект переменной среды вашего приглашения ($PS1
) - как этоPS1
определяется?$PS1
переменная определяется как[\u@\h \W]\$
. Есть проблемы с настройкой?/
когда pwd =/
. Я задавался вопросом, делали ли вы какую-либо дополнительную работу, чтобы получить каталог. Является ли$PROMPT_COMMAND
установить?echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"
. Не могли бы вы объяснить немного подробнее? Я не совсем знаком с этими двумя переменными. Благодарю.PS1
иPROMPT_COMMAND
- используйтеman bash
в командной строке или прочитайте онлайнСвойство и все несколько // будут заменены на один /
Это полезно, если у вас есть переменные с путями, как пример в конце. Таким образом, ваш компакт-диск не получит никакой ошибки, и вам не нужно менять переменную рабочей области.
полное содержимое переменной проекта
источник