Символические ссылки Linux на каталоги

Я создал символическую ссылку в моей домашней папке в другой каталог:

$ pwd
/home/user1
$ ln -s /usr/local/dir/ shortcut
$ ls -l
................................... shortcut -> /usr/local/dir/
$ cd shortcut
$ pwd
/home/user1/shortcut

Я в конечном итоге в этом каталоге, чтобы я мог видеть все файлы там, кроме pwd сбивает с толку и может вызвать проблемы. Есть ли лучший способ для этого, чтобы он действовал по ярлыку и на самом деле показывает /usr/local/dir когда я вхожу в cd shortcut вместо показа нового пути?

2 ответа

Решение

И то и другое cd а также pwd есть флаги для использования физической структуры каталогов.

CD

$ cd --help
...
  -P   use the physical directory structure without following
       symbolic links: resolve symbolic links in DIR before
       processing instances of `..'
...

например

$ cd /var/tmp 
$ ln -s /home/user test 
$ cd -P test
$ pwd
/home/user

Выше мы используем cd -P использовать физическую структуру каталогов, так что теперь pwd дает нам физический путь.

PWD

$ pwd
...
  -P    print the physical directory, without any symbolic links
...

например

$ cd /var/tmp
$ ln -s /home/user test 
$ cd test
$ pwd
/var/tmp/test
$ pwd -P
/home/user

Выше мы cdв каталог как обычно, так pwd дает символический путь. С помощью pwd -P даст физический путь.

Установить глобально в Bash

Если вы используете bash Вы можете сказать ему, чтобы он полностью игнорировал символические ссылки и просто использовал физическую структуру каталогов, запустив set -P (сокращение для set -o physical, смотрите страницу руководства `bash). Это возможно и с другими оболочками.

Используйте $CDPATH

$ CDPATH=/usr/local
$ cd dir
$ pwd
/usr/local/dir
Другие вопросы по тегам