Работа в каталоге symlink идентична работе непосредственно в каталоге?

В моем домашнем каталоге у меня есть папка с именем symlinks в которой живут все мои символические ссылки. Я добавил эту папку в CDPATH , чтобы я мог сделать:

 ~$ cd FarAwayDirectory ~/symlinks/FarAwayDirectory$ 

Я заметил, что если я pwd , я получаю:

~/symlinks/FarAwayDirectory -> A

скорее, чем:

.../.../.../FarAwayDirectory -> B

это то, что я бы получил через последовательные cd .

Итак, мой вопрос: работа в каталоге A идентична работе в каталоге B ?

Да. Работа в каталоге A такая же, как работа в каталоге B.

Символьная ссылка – это специальный файл, который указывает на другой файл. ~/symlinks/FarAwayDirectory фактически не имеет собственных данных (кроме основных метаданных файловой системы). Скорее, он буквально указывает на каталог, с которым он связан.

Вы можете проверить это, создав файл в ~/symlinks/FarAwayDirectory и ~/symlinks/FarAwayDirectory что файл существует в полном пути к фактическому каталогу.

Да, если вы используете версию pwd , встроенную в bash , вы получите вывод A.

Но попробуйте явно вызвать автономную двоичную версию pwd :

 $ /bin/pwd 

Я думаю, вы увидите ваш вывод Б.

В основном это происходит потому, что bash запоминает, что вы пришли в каталог по символической ссылке, и поэтому по умолчанию представляет вам путь в «логической» форме (ваш вывод A). Если вы хотите, чтобы «физический» путь (ваш вывод B) был представлен во всех подобных случаях, вы можете использовать set -P чтобы сделать это.

Или, если вы хотите сделать это на индивидуальной основе, встроенная в bash команда cd также поддерживает опции ‘-L’ и ‘-P’.

Там нет каталога А.

Это символическая ссылка, а не каталог . Рабочий каталог – это один и тот же каталог в обоих случаях. Единственная разница заключается в значении переменной PWD , которая, в свою очередь, влияет на то, что некоторые команды сообщают как имя текущего каталога. Например, встроенная команда pwd в нескольких shellх сообщит значение переменной оболочки PWD если не указано игнорировать ее. Внешняя команда pwd (если ей приказано сделать это с опцией -L ) проверит, что значение переменной среды PWD которое она унаследовала, и проверяет, использует ли оно также имя для текущего каталога.

дальнейшее чтение