4

Как я могу получить оболочку, чтобы понять полный путь после перехода по символической ссылке. В приведенном ниже примере я хотел бы, чтобы первая команда "pwd" сообщала "/Users/sholden/Projects/PS1/examples", и команда "cd ..", чтобы привести меня к /Users/sholden/Projects/PS1/ а не обратно в мой домашний каталог. У меня тусклая память о настройке, которая делала это в оболочке Bourne (или это был Korn), но у меня возникли проблемы с углублением деталей 25 лет назад ...

AirHead:~ sholden$ ls -ld examples
lrwxr-xr-x  1 sholden  staff  53 Nov 15 09:33 examples -> /Users/sholden/Projects/PS1/examples
AirHead:~ sholden$ cd examples
AirHead:examples sholden$ pwd
/Users/sholden/examples
AirHead:examples sholden$ cd ..
AirHead:~ sholden$ pwd
/Users/sholden
AirHead:~ sholden$ 

Было ли это "установить жесткие пути"?" Заранее спасибо.

2 ответа2

5

Вы должны использовать cd с опцией -P чтобы сделать это.

от человека панге:

 -P     Handle the operand dot-dot physically; symbolic link components shall be resolved before dot-dot components
              are processed (see step 7. in the DESCRIPTION).

Небольшой тест, чтобы показать, как это работает:

kent@ArchT60:/tmp$ ls -ld /opt/google/picasa/
drwxr-xr-x 3 root root 4096 Aug  5  2010 /opt/google/picasa/

kent@ArchT60:/tmp$ ln -s /opt/google/picasa/ cdLink
kent@ArchT60:/tmp$ ls -l cdLink
lrwxrwxrwx 1 kent kent 19 Nov 15 21:23 cdLink -> /opt/google/picasa/

kent@ArchT60:/tmp$ cd -P cdLink
kent@ArchT60:/opt/google/picasa$ pwd
/opt/google/picasa

kent@ArchT60:/opt/google/picasa$ cd /tmp/cdLink
kent@ArchT60:/tmp/cdLink$ 
kent@ArchT60:/tmp/cdLink$ cd -P ..
kent@ArchT60:/opt/google$ 

Я думаю, что приведенный выше пример показал, что вы ищете.

1

Я никогда не находил способ сделать это с помощью символических ссылок, но если ваша цель - быстро переключаться между каталогами в оболочке, я недавно написал сообщение в блоге о нескольких альтернативах, чтобы добиться именно этого.

Краткий ответ - использовать псевдоним, чтобы добавить что-то похожее на следующее в ~/.bashrc:

alias sf='cd ~/SmileForward/smileforward-backend/sfsite/smileforward'

Или экспортируйте все часто используемые каталоги как переменные в ваш ~/.bashrc , и просто вызывайте напрямую с помощью cd $dir_1 т.д.

export dir_1='~/some_long_path_name/more_path_names1`
export dir_2='~/some_long_path_name/more_path_names2`

Есть также инструмент для переключения каталогов, основанный на частоте / недавности, называемый z, который я никогда не исследовал полностью.

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