Изменение родительского каталога (../) с помощью символических ссылок

32

У меня есть символическая ссылка

~/link -> ~/a/really/long/path

Когда я делаю

cd ~/link
cd ..    

мне нужно

~

но я хочу пойти в

~/a/really/long

Есть ли способ сделать это?

Я использую Bash.

Xodarap
источник
1
Ты имеешь в виду cd ~/a/really/long/pathто, что cd ..ставит тебя ~сейчас? Я не могу воспроизвести это.
Микель
1
@Mikel: Нет, сначала создайте символическую ссылку, ~/a/really/long/pathзатем перейдите на этот диск, а затем на ... Вы должны вернуться в ~ (при условии, что это то, с чего вы начали).
Xodarap
Правильно ли моё редактирование? Я не мог понять вопрос раньше.
Микель

Ответы:

38

Bash (а также ksh, zsh и даже ash) отслеживают изменения в каталогах, так что cd /foo/bar && cd ..вы всегда можете перейти /fooдаже barк символической ссылке. Передайте -Pопцию, чтобы cdигнорировать отслеживаемое изменение и следуйте «физической» структуре каталогов:

cd -P ..

Смотрите help cdили man builtinsдля документации о встроенной Bash cd. Если вам действительно не нравится функция отслеживания каталогов, вы можете отключить ее с помощью set -Pbash ( set -o no_chase_linkв zsh).

Жиль "ТАК - прекрати быть злым"
источник
1
То, как я читаю вопрос, ОП уже установил -Pили -o physicalуже установил?
Микель
+1, но предложить ссылку на справочную страницу.
Фахим Митха
@Mikel: Нет, вопрос говорит о том, что он следует по символической ссылке, а не по структуре физического каталога.
Фахим Митха
Извините, я на самом деле не пытался редактировать ваше сообщение. Предложенное редактирование отправлено сейчас.
Фахим Митха
4

Вы также можете использовать readlink, чтобы найти физический путь к этому каталогу, а затем перейти на один каталог выше:

cd $(readlink -f .)/..
dhasenan
источник
3

Один из методов, который вы могли бы использовать, - использовать псевдоним вместо символической ссылки, чтобы перейти на ~ / a / Действительно / Длинный / путь. Это метод, который я использую, с тех пор я могу просто набрать простую команду 1/2 / et cetera letter вместо cd symlink

Wipqozn
источник