Zmiana katalogu nadrzędnego (../) za pomocą dowiązań symbolicznych

32

Mam dowiązanie symboliczne

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

Kiedy robię

cd ~/link
cd ..    

zabiera mnie do

~

ale chcę iść do

~/a/really/long

Czy jest na to sposób?

Używam bash.

Xodarap
źródło
1
Masz na myśli, cd ~/a/really/long/pathpo czym cd ..wkłada pan w ~tej chwili? Nie mogę tego odtworzyć.
Mikel
1
@Mikel: Nie, najpierw utwórz dowiązanie symboliczne, ~/a/really/long/patha następnie cd do tego, a następnie do ... Powinieneś skończyć w ~ (zakładając, że od tego zacząłeś).
Xodarap,
Czy moja edycja jest dokładna? Nie mogłem wcześniej zrozumieć pytania.
Mikel

Odpowiedzi:

38

Bash (podobnie jak ksh, zsh, a nawet ash) śledzi zmiany w katalogu, dzięki czemu cd /foo/bar && cd ..zawsze zabierasz się, /foonawet jeśli barjest dowiązaniem symbolicznym. Przekaż -Popcję cdignorowania śledzonej zmiany i postępuj zgodnie z „fizyczną” strukturą katalogów:

cd -P ..

Zobacz help cdlub man builtinsdokumentację dotyczącą wbudowanego basha cd. Jeśli naprawdę nie lubisz funkcji śledzenia katalogów, możesz ją wyłączyć za pomocą set -Pw bash ( set -o no_chase_linkw zsh).

Gilles „SO- przestań być zły”
źródło
1
Sposób, w jaki przeczytać pytanie, PO ma -Palbo -o physicaljuż ustawiony?
Mikel
+1, ale sugeruj link do strony man.
Faheem Mitha
@Mikel: Nie, pytanie mówi, że podąża za dowiązaniem symbolicznym, a nie fizyczną strukturą katalogów.
Faheem Mitha,
Niestety, nie próbowałem edytować Twojego wpisu. Sugerowana edycja przesłana teraz.
Faheem Mitha
4

Możesz także użyć readlink, aby znaleźć fizyczną ścieżkę do tego katalogu, a następnie przejść o jeden katalog wyżej:

cd $(readlink -f .)/..
dhasenan
źródło
3

Jedną z metod, której możesz użyć, jest użycie aliasu zamiast dowiązania symbolicznego, aby doprowadzić cię do ~ / a / naprawdę / długiej / ścieżki. To jest metoda, której używam, ponieważ odtąd mogę po prostu wpisać proste polecenie literowe 1/2 / et cetera zamiast cd symlink

Wipqozn
źródło