Utwórz absolutne dowiązanie symboliczne do bieżącego katalogu


12

Jestem teraz w katalogu z bardzo długą ścieżką. W celu szybszego odwiedzania go w przyszłości chciałbym utworzyć link do niego.

próbowałem

ln -s . ~/mylink

~/mylinkfaktycznie linki do ~. Czy mogę rozwinąć ~nazwę do przestarzałej nazwy ścieżki, a następnie ją podać ln?

Odpowiedzi:


19

Dowiązanie symboliczne faktycznie przechowuje ścieżkę, którą podajesz dosłownie, jako ciąg znaków¹. Oznacza to, że Twój link ~/mylinkzawiera „ .” (jeden znak). Gdy uzyskujesz dostęp do łącza, ścieżka jest interpretowana w odniesieniu do tego, gdzie jest link, a nie w miejscu, w którym byłeś, kiedy tworzyłeś link.

Zamiast tego możesz zapisać aktualną ścieżkę w linku:

ln -s "$(pwd)" ~/mylink

za pomocą podstawiania poleceń, aby umieścić dane wyjściowe pwd(nazwa katalogu roboczego) w wierszu polecenia. lnwidzi pełną ścieżkę i zapisuje ją w dowiązaniu symbolicznym, które następnie wskaże właściwe miejsce.

¹ Mniej więcej.


2
Zobacz także "$PWD"w powłokach POSIX i ~0w zsh.
Stéphane Chazelas

7

Powinieneś użyć:

ln -s "$(cd . && pwd)" ~/mylink

lub:

ln -s "$(pwd -P)" ~/mylink

aby uzyskać właściwy wynik dla bieżącego katalogu roboczego. Można to zmienić podczas pracy nad nim, tak jak w tym pytaniu .


1
Pierwszy niekoniecznie pomoże we wszystkich powłokach (zobacz tę odpowiedź ). OP najprawdopodobniej chce użyć $PWD(ścieżki, którą się tam znalazł), a nie $(pwd -P)(ścieżki kanonicznej do bieżącego katalogu). Jeśli $PWDnie będzie już wskazywał na bieżący katalog, nie będzie też mowy o tym $(pwd -P)w następnej minucie.
Stéphane Chazelas

@ StéphaneChazelas: Zobacz ten unix.stackexchange.com/questions/147693/…
cuonglm

@ StéphaneChazelas: Jeśli "$PWD"przeniesiony zostanie bieżący katalog, nadal możesz mieć starą wartość. PWDustawiane tylko podczas cdinicjowania lub inicjowania przez powłokę.
cuonglm

Ale mówię, że OP może chcieć starego $ PWD niż jakiejkolwiek bezwzględnej ścieżki do bieżącego katalogu roboczego i że w kilku powłokach (ksh93, ash, yash), jak wyjaśniono , wywołanie cdnie jest gwarantowane $ PWD lub wyjście pwd ścieżka do bieżącego katalogu. Próbujesz uchronić się przed czymś, co prawdopodobnie się nie wydarzy, ale w pierwszym rozwiązaniu niekoniecznie jest to skuteczne, a w drugim zmienia zachowanie.
Stéphane Chazelas

1
Jeśli ktoś robi to mv po to zrobisz ln, to kończy się w tej samej sytuacji. Z drugiej strony, jeśli tak cd /long/logical/path/to/some/directory, nie chcesz, aby link wskazywał /vg0/lv1/user2/app4(ścieżkę kanoniczną), ponieważ link wskaże niewłaściwe miejsce, gdy wskaże /long/logical/path/to/some/directorygdzieś indziej.
Stéphane Chazelas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.