Dowiązanie symboliczne do bieżącego folderu jako ścieżka bezwzględna bez wpisywania całej ścieżki

10

Dowiązania symboliczne to zapisane skróty do ścieżek względnych:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Plik ~/bar/foojest dowiązaniem symbolicznym do barbieżącego katalogu, tj. Do samego siebie

Co jeśli chcę utworzyć dowiązanie symboliczne w innym katalogu do katalogu, w którym jestem w tym czasie? Tak więc w powyższym przykładzie jestem ~/fooi chcę utworzyć ~/bar/foojako dowiązanie symboliczne do ~/foo. Oczywiście mój bieżący katalog może być nieco dłuższy niż 5 znaków i może nie być tak łatwy do wpisania.

Gareth
źródło

Odpowiedzi:

13

Powiedziałbym typ

ln -s $PWD ~/bar/

lub

ln -s `pwd` ~/bar/

Możesz także użyć

ln -s $PWD ~/bar/

ale chyba o tym wiedziałeś i nie o to ci chodzi. Czy mógłbyś zaktualizować swoje pytanie, aby wyjaśnić, jaki jest twój cel?

Jeśli ścieżka zawiera spacje, zaleca się użycie:

ln -s "$PWD" ~/bar/
Huygens
źródło
2
Podaj dwukrotnie swoje $zmienne i podstawienia poleceń, w przeciwnym razie nazwy plików ze spacjami spowalniają przebieg. Nie potrzebujesz również zakończenia $(basename $PWD)(i zapomniałeś $(i cytujesz :-))), ponieważ i tak jest to domyślna nazwa linku.
Daniel Andersson
Myślę, że byłem głupi. Myślałem, że wypróbowałem pwdpodejście i coś poszło nie tak. Spójrzmy na błąd ID-ten-T
Gareth
@DanielAndersson masz rację, że nie obsługuje spacji na ścieżce. Słuszna uwaga. więc dla przypomnienia zaktualizuję odpowiedź :)
Huygens
4

Absolutnie:

ln -s "$(readlink -f .)" ~/bar

(może być dobre dla ogólności w skryptach) lub po prostu

ln -s ~/foo ~/bar

Stosunkowo:

ln -s ../foo ~/bar

Uzupełnianie tabulatorów pomoże Ci pisać.


Z komentarza grawity i http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Godne uwagi zmiany w wersji 8.16 (2012-03-26) [stabilny]

...

lnteraz akceptuje --relativeopcję generowania względnego symbolicznego łącza do celu, niezależnie od tego, jak określono cel.

Więc w tej wersji:

ln -s --relative . ~/bar

powinien działać (w praktyce jest identyczny z twoim pierwszym przykładem, z dodatkiem --relativeprzełącznika).

Daniel Andersson
źródło
4
Najnowsze coreutils mogą automatycznie tworzyć względne dowiązania symboliczne za pomocą ln -s -r foo ~/bar.
user1686
@grawity: Ciekawe. Najwyraźniej jeszcze nie w moim systemie (Debian Sid).
Daniel Andersson
Według git wydaje się, że został dodany do wersji 8.0.16 22 marca.
user1686
1
Jaka jest przewaga $(readlink -f .)nad $PWD?
user1686
2
@grawity: Niewiele. Działają inaczej, jeśli bieżący katalog roboczy został osiągnięty przez łącze. readlink -fbędzie wtedy dowiązanie symboliczne do bezwzględnej ścieżki docelowej bieżącego katalogu, podczas gdy $PWDbędzie dowiązanie symboliczne do dosłownego katalogu, w którym aktualnie się znajduje. To, czego chce, prawdopodobnie od czasu do czasu jest inne, a przede wszystkim prawdopodobnie nie stanowi problemu.
Daniel Andersson