Erstellen Sie eine absolute symbolische Verknüpfung zum aktuellen Verzeichnis

12

Ich bin jetzt unter einem Verzeichnis mit sehr langem Pfad. Für einen späteren, schnelleren Besuch möchte ich einen Link erstellen.

Ich habe es versucht

ln -s . ~/mylink

~/mylinkeigentlich Links zu ~. Kann ich also ~in den veralteten Pfadnamen expandieren und ihn dann übergeben ln?

Tim
quelle

Antworten:

19

Ein Symlink speichert den Pfad, den Sie buchstäblich angeben, als Zeichenfolge¹. Das heißt, Ihr Link ~/mylinkenthält " ." (ein Zeichen). Wenn Sie auf den Link zugreifen, wird dieser Pfad relativ zu dem Ort interpretiert, an dem sich der Link befindet, und nicht zu dem Ort, an dem Sie sich befanden, als Sie den Link erstellt haben.

Stattdessen können Sie den gewünschten Pfad im Link speichern:

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

Verwenden der Befehlsersetzung , um die Ausgabe von pwd(den Namen des Arbeitsverzeichnisses) in Ihre Befehlszeile einzufügen. lnsieht den vollständigen Pfad und speichert ihn in Ihrem Symlink, der dann auf die richtige Stelle verweist.

¹ Mehr oder weniger.

Michael Homer
quelle
2
Siehe auch "$PWD"in POSIX-Shells und ~0in zsh.
Stéphane Chazelas
7

Du solltest benutzen:

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

oder:

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

um das richtige Ergebnis für das aktuelle Arbeitsverzeichnis zu erhalten. Es kann wie in dieser Frage geändert werden, während Sie daran gearbeitet haben .

cuonglm
quelle
1
Der erste wird nicht unbedingt in allen Schalen helfen (siehe diese Antwort ). Das OP möchte wahrscheinlich $PWD(den Pfad, den er verwendet hat, um dorthin zu gelangen) anstatt $(pwd -P)(den kanonischen Pfad zum aktuellen Verzeichnis) verwenden. Wenn $PWDnicht mehr auf das aktuelle Verzeichnis zeigt, gibt $(pwd -P)es auch in der nächsten Minute kein Wort dafür .
Stéphane Chazelas
@ StéphaneChazelas: Siehe hierzu unix.stackexchange.com/questions/147693/…
cuonglm
@ StéphaneChazelas: Du kannst "$PWD"immer noch den alten Wert sehen, wenn das aktuelle Verzeichnis verschoben wird. PWDnur bei dir einstellen cdoder durch die shell initialisieren.
1.
Aber was ich sagen will ist , dass die OP so wahrscheinlich ist es, die alten $ PWD als einige absolute Pfad zum aktuellen Arbeitsverzeichnis zu wollen , und dass in mehreren Schalen (ksh93, Esche, yash), wie erklärt es ruft cdgarantiert nicht zu machen $ PWD oder die Ausgabe von pwd ein Pfad zum aktuellen Verzeichnis. Sie versuchen, sich vor etwas zu schützen, das wahrscheinlich nicht passieren wird, aber in der ersten Lösung ist dies nicht unbedingt effektiv, und in der zweiten ist dies eine Änderung des Verhaltens.
Stéphane Chazelas
1
Wenn jemand das tut, mv nachdem Sie es getan haben ln, geraten Sie in die gleiche Situation. Auf der anderen Seite cd /long/logical/path/to/some/directorymöchten Sie nicht, dass der Link auf /vg0/lv1/user2/app4(den kanonischen Pfad) /long/logical/path/to/some/directoryverweist, da der Link auf die falsche Stelle verweist, wenn er auf eine andere Stelle verweist.
Stéphane Chazelas