Розв’язування символічних посилань (pwd)


32

Скажіть, я роблю таке:

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безпосередньо.


7
Зв'язане з цим питанням . Ви можете зробити pwd -Pабо alias pwd='pwd -P'також cd -Pперейти до фізичної стежки замість симпосилання.
Мартін Канавал

@ MartínCanaval Спасибі; ось що я шукав!
Райан

Відповіді:


35

У вашій оболонці є вбудований pwd, який намагається бути «розумним». Після того, як ви зробили cdсимвольне посилання, внутрішня pwdпідробка підробляє висновок, як ніби ви перейшли в реальний каталог.

Передайте -Pваріант pwd, тобто запустити pwd -P. -PВаріант (для «фізичного») говорить pwdне робити якісь - або символічні посилання відстеження та відображення «реальний» шлях до каталогу.

Як варіант, також повинен бути справжній бінарний pwd, який не робить (і навіть не в змозі) такого роду магії. Просто використовуйте цю двійкову виразність:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

12

Спробуйте cd -P <symlink_dirname>.

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

Ви також можете використовувати, set -o physicalщоб така поведінка зберігалася протягом тривалості роботи запущеної оболонки.

Ознайомтеся з https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links для отримання додаткової корисної інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.