Зміна батьківського каталогу (../) із посиланнями


32

У мене є симпосилання

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

Коли я це роблю

cd ~/link
cd ..    

це бере мене до

~

але я хочу піти

~/a/really/long

Чи є спосіб це зробити?

Я використовую bash.


1
Ти маєш на увазі, cd ~/a/really/long/pathто cd ..вводить тебе в ~даний момент? Я не можу цього відтворити.
Мікель

1
@Mikel: Ні, спочатку створіть симпосилання, а ~/a/really/long/pathпотім cd до цього, потім до ... Ви повинні повернутися до ~ (якщо припустити, що з цього ви почали).
Xodarap

Чи точна моя редакція? Я раніше не міг зрозуміти питання.
Мікель

Відповіді:


38

Bash (а також ksh, zsh і навіть ash) доріжка треків змінюється так, що cd /foo/bar && cd ..завжди перетягує вас, /fooнавіть якщо barце посилання. Введіть -Pопцію, щоб cdігнорувати відстежувану зміну та дотримуйтесь "фізичної" структури каталогу:

cd -P ..

Див help cdабо man builtinsдокументації про Баш вбудованих команд cd. Якщо ви дійсно не любите функцію відстеження каталогу, ви можете вимкнути її set -Pв bash ( set -o no_chase_linkв zsh).


1
Як я прочитав питання, ОП має -Pабо -o physicalвже встановлений?
Мікель

+1, але запропонуйте посилання на сторінку man.
Faheem Mitha

@Mikel: Ні, питання говорить про те, що він слідує символічному посиланню, а не фізичній структурі каталогу.
Faheem Mitha

На жаль, я не намагався редагувати вашу публікацію. Пропонована редакція надіслана зараз.
Faheem Mitha

4

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

cd $(readlink -f .)/..

3

Один із методів, який ви можете використовувати, - це використовувати псевдонім замість символьного посилання, щоб перевести вас до ~ / a / дійсно / довгий / шлях. Це метод, який я використовую, оскільки тоді я можу просто ввести просту команду літер 1/2 / et cetera замість cd symlink

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.