![Символические ссылки Linux: как перейти в указанный каталог?](https://rvso.com/image/1558038/%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8%20Linux%3A%20%D0%BA%D0%B0%D0%BA%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B9%D1%82%D0%B8%20%D0%B2%20%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%3F.png)
У меня есть проект в отдельном каталоге:
/директория/в/проект/
У меня есть символическая ссылка на этот каталог на рабочем столе:
/home/user/Рабочий стол/проект/
Когда я дважды щелкаю по этой ссылке, открывается следующее окно каталога:
/home/user/Рабочий стол/проект/
вместо настоящего, /dir/to/project
.
То же самое происходит и с командной строкой (Bash).
Можно ли получить то, что я хочу, т.е. перейти в указанный каталог, а не в символьный?
Примечание: сейчас я использую среду Windows Xfce, но мне также интересен общий ответ.
решение1
Во 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
Подробности см.
решение2
Используйте readlink
для преобразования ссылки в ее цель:
cd $(readlink thelink)
Возможно, вы захотите определить функцию в своем профиле bash:
function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; }
решение3
Я не знаю, как это сделать в графическом интерфейсе, но есть обходной путь в командной строке.
Допустим, ваша символическая ссылка:
/home/user/Desktop/project/
тогда, Вы можете использоватьчитатьссылкакоманда для получения разрешенной символической ссылки или ее канонического имени файла. Затем просто cd
к нему.
cd `readlink /home/user/Desktop/project`
Здесь readlink
разрешает имя ссылки и затем переходит к cd
использованиюзамена.
Если вы уже находитесь в папке «Рабочий стол», то нет необходимости указывать абсолютный путь, просто project
сделайте это
cd `readlink project`
Если вы часто посещаете эту папку, вы можете написать для нее однострочную функцию в bash:
function cdproject
{
cd `readlink home/user/Desktop/project`;
}