Символические ссылки 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`;
}