Разрешение символических ссылок (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.