Переход в каталог, связанный ссылкой

12

Когда я cdявляюсь ссылкой, моему текущему пути предшествует путь ссылки, а не путь к каталогу, на который ссылается ссылка. Например

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Я хотел бы, чтобы мой текущий путь был изменен на путь связанного каталога, чтобы я мог также работать с родительскими каталогами связанного каталога. Помимо lsссылки, чтобы узнать связанный каталог, а затем cdв него, каковы некоторые более простые способы сделать это? Например, после cdссылки, как вы меняете текущий путь на путь к связанному каталогу?

Тим
источник

Ответы:

22

В оболочке POSIX вы можете использовать -Pопцию встроенного cd :

cd -P <link>

С bash, из man bash:

Опция -P говорит об использовании физической структуры каталогов вместо символьных ссылок (см. Также опцию -P для встроенной команды set)

cuonglm
источник
7
Вы можете сделать это cd -P .после оригинала cd.
ctrl-alt-delor
5

Вы можете использовать, readlinkчтобы определить, где находится ваша ссылка, и предоставить этот вывод в качестве цели вашей cd.

cd "$(readlink <link>)"

В случае дополнительных символических ссылок, указывающих на символические ссылки, readlinkпросто укажите цель, если вы не укажете один из ее вариантов, например, следовать символическим ссылкам на канонический файл цели readlink -f <link>.

readlink - вывести значение символической ссылки или канонического имени файла

-f, --canonicalize
canonicalize путем рекурсивного следования каждой символической ссылке в каждом компоненте данного имени; все, кроме последнего компонента должны существовать

-e, --canonicalize-существующие
canonicalize путем рекурсивного следования каждой символической ссылке в каждом компоненте данного имени, все компоненты должны существовать

-m, --canonicalize-missing
canonicalize путем рекурсивного следования каждой символической ссылке в каждом компоненте данного имени, без требований к существованию компонентов

Джон Суррелл
источник
5

Корн-подобные оболочки отслеживают символические ссылки в пути к текущему каталогу (это называется логическим отслеживанием текущего каталога). Если вы хотите , чтобы развернуть все символические ссылки, передать параметр -Pк cdвстроенной команде (для физического текущего отслеживания каталогов):

cd -P logic

Если вы находитесь в каталоге, к которому вы получили доступ по символической ссылке и хотите переключить отслеживаемый текущий каталог на путь с расширенными символическими ссылками, запустите

cd -P .

Если вы хотите распечатать путь к текущему каталогу с расширенными символическими ссылками, запустите pwd -P. В bash, если вы хотите отключить логическое отслеживание, запустите set -P; в зш, беги set -wили setopt chase_links.

Жиль "ТАК - перестань быть злым"
источник