Разрешение символьных ссылок (pwd)

Для обработки пробелов и blank|special символов в переменных необходимо всегда окружать их двойными кавычками. Установка надлежащей IFS является хорошей практикой также.

Рекомендуется: http://www.dwheeler.com/essays/filenames-in-shell.html

33
03.02.2013, 23:58
2 ответа

Ваша оболочка имеет встроенное pwd, который пытается быть "умным". После того, как Вы сделали a cd к символьной ссылке внутреннее pwd фальсифицирует вывод, как будто Вы переместились в реальный каталог.

Передайте -P опция к pwd, т.е. выполненный pwd -P. -P опция (для “физического”) говорит pwd не сделать любое отслеживание символьной ссылки и отобразить “реальный” путь к каталогу.

С другой стороны, должен также быть реальный двоичный файл pwd, который не делает (и даже не в состоянии сделать), этот вид волшебства. Просто используйте тот двоичный файл explicity:

$ 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
36
27.01.2020, 19:37

Попробовать 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 для некоторой более хорошей информации.

13
27.01.2020, 19:37

Теги

Похожие вопросы