Символические ссылки Linux: как перейти в указанную директорию?

У меня есть проект в своем собственном каталоге:

/ Реж / в / проект /

У меня есть символическая ссылка на этот каталог на рабочем столе:

/ Главная / пользователя /Desktop/ проект /

Когда я дважды щелкаю по этой ссылке, открывается окно каталога:

/ Главная / пользователя /Desktop/ проект /

вместо настоящего, /dir/to/project,

То же самое происходит с командной строкой (Bash).

Можно ли получить то, что я хочу, т.е. перейти в каталог, на который указывает символ, вместо символического?

Примечание: среда Windows, которую я сейчас использую, - это Xfce, но меня также интересует общий ответ.

3 ответа

Решение

В bash cd встроенный использует -P а также -L выключатели; pwd понимает их так же:

user@host:~$ ln -s /bin foobar
user@host:~$ cd -L foobar      # follow link
user@host:~/foobar$ pwd -L     # print $PWD
/home/user/foobar
user@host:~/foobar$ pwd -P     # print physical directory
/bin
user@host:~/foobar$ cd -       # return to previous directory
/home/user
user@host:~$ cd -P foobar      # use physical directory structure
user@host:/bin$ pwd -L         # print $PWD
/bin
user@host:/bin$ pwd -P         # print physical directory
/bin

более того cd .. может быть сложно:

user@host:/bin$ cd
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -L ..   # go up, to ~/
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -P ..   # go up, but not to ~/
user@host:/$

Увидеть help cd а также help pwd, Обратите внимание, что у вас также может быть исполняемый файл (т.е. не встроенная оболочка), например /bin/pwd это должно вести себя аналогично. В моем Kubuntu разница заключается в pwd встроенный без какой-либо опции использования -L в то время как /bin/pwd по умолчанию использует -P,

Вы можете настроить поведение по умолчанию cd встроенный set -P (cd выступает в качестве cd -P) а также set +P (cd выступает в качестве cd -L). Увидеть help set для деталей.

Использование readlink разрешить ссылку на свою цель:

cd $(readlink thelink)

Вы можете определить функцию в своем профиле bash:

function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; }

Я не знаю, как этого добиться в GUI, но в командной строке есть обходной путь.

Скажите, что ваша символическая ссылка:

/home/user/Desktop/project/

Затем вы можете использовать команду readlink, чтобы получить разрешенную символическую ссылку или ее каноническое имя файла. Тогда просто cd к этому.

cd `readlink /home/user/Desktop/project`

Вот, readlink разрешает имя ссылки и затем переходит к cd используя замену.

Если вы уже находитесь в папке Desktop, нет необходимости указывать абсолютный путь, просто project Сделаю

cd `readlink project`

Если вы часто посещаете эту папку, вы можете написать для нее одну строковую функцию:

function cdproject
{
    cd `readlink home/user/Desktop/project`;
}
Другие вопросы по тегам