Модераторы: ЭТО НЕ ДУБЛИКАТ !!!! Пожалуйста, удалите дубликат отметки.
Ответы, связанные с, на самом деле не отвечают на мой вопрос, как принятый ответ. Google только указывает на другие ответы, которые на самом деле не являются ответом на этот конкретный вопрос.
При переходе по символической ссылке на каталог оболочка bash
пытается создать иллюзию, что символическая ссылка является настоящим каталогом.
Однако есть много случаев, когда это ломается. Например, подумайте, что я мог бы иметь:
/usr/local/src/project-a-1.0/
/usr/local/src/project-b-2.2/
тогда у меня есть символическая ссылка в моем домашнем каталоге:
ln -s /usr/local/src/project-a-1.0 ~/project
Теперь я хочу использовать ярлык для работы с project-a
:
cd ~/project
Пока все хорошо, но bash делает вид, что я на самом деле в ~/project
, а не в реальном рабочем каталоге. Он даже притворяется при использовании встроенного pwd
, но, конечно, не при использовании исполняемого файла /bin/pwd
.
Теперь, если я хочу извлечь файл в project-b
, я могу попробовать vim ../project-b<TAB>
чтобы попытаться заставить завершение команды работать. Тем не менее, bash
отказывается завершить это, потому что считает, что ..
это каталог, содержащий домашние страницы пользователей.
Тем не менее, если я vim ../project-b-2.2/somefile.txt
то это работает нормально, чего я и ожидал.
Симлинки не являются каталогами, и из-за этой ошибки в bash возникают всевозможные неудобства и даже ошибки. Я пытался найти вариант, чтобы отключить это, но все хиты Google и суперпользователя просто о том, "как я могу вручную разрешить путь ссылки" - это не то, что я хочу здесь; Я хочу, чтобы bash прекратил попытки эмулировать файловую систему поверх моей файловой системы, плохо. Конечно, существует какой-то вариант, который поставит правильность перед иллюзией?
Всплывающее окно "Подобные вопросы" указывало на два других вопроса, на которые Google уже прислал мне; оба они требуют, чтобы я передал опцию "-P" в pwd
или cd
или даже рекомендовал использовать readlink
чтобы выяснить цель символической ссылки. Это совсем не то, что мне интересно. Я хочу, чтобы встроенный pwd
и приглашение оболочки $PWD
соответствовали физическому выводу системного вызова getcwd()
; эти вопросы не говорят об этом вообще.