Для обработки пробелов и blank|special символов в переменных необходимо всегда окружать их двойными кавычками. Установка надлежащей IFS является хорошей практикой также.
Рекомендуется: http://www.dwheeler.com/essays/filenames-in-shell.html
Ваша оболочка имеет встроенное 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
Попробовать 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 для некоторой более хорошей информации.