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

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

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

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

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

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

вместо реального, /dir/to/project .

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

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

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

3 ответа3

5

В 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; }
1

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

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

/home/user/Desktop/project/

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

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

Здесь readlink разрешает имя ссылки и затем переходит к cd с помощью замены.

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

cd `readlink project`

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

function cdproject
{
    cd `readlink home/user/Desktop/project`;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .