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