Скажи, что я делаю следующее:
cd /some/path
ln -s /target/path symbolic_name
Если тогда сделать:
cd /some/path
cd symbolic_name
pwd
Я получил:
/some/path/symblic_name
и нет:
/target/path
Есть ли способ заставить оболочку "полностью разрешить" символическую ссылку (т.е. обновить CWD и т. Д.), Как если бы я непосредственно это сделал:
cd /target/path
?
Мне нужно запустить некоторые программы, которые кажутся «осведомленными» или «чувствительными» о том, как я добираюсь до моего целевого пути, и я хотел бы, чтобы они думали, что я прибыл на целевой путь, как если бы это было сделано cd /target/path
напрямую.
pwd -P
илиalias pwd='pwd -P'
такжеcd -P
перейти на физический путь вместо символической ссылки.Ответы:
Ваша оболочка имеет встроенную функцию
pwd
, которая пытается быть «умной». После того, как вы сделалиcd
символическую ссылку, внутреннийpwd
фальсифицирует вывод, как если бы вы переместились в реальный каталог.Передать
-P
опциюpwd
, то есть запуститьpwd -P
.-P
Вариант (для «физического») говоритpwd
не делать какие - либо символические ссылки отслеживания и отображения «реальный» путь к каталогу.В качестве альтернативы также должен быть настоящий двоичный файл
pwd
, который не делает (и даже не способен) этого вида магии. Просто используйте этот двоичный текст:источник
Попробуй
cd -P <symlink_dirname>
.Вы также можете использовать,
set -o physical
чтобы это поведение сохранялось в течение всего времени работы запущенной оболочки.Проверьте https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links для получения дополнительной полезной информации.
источник