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

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

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

/директория/в/проект/

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

/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`;
}

Связанный контент