Antworten:
Ein Symlink speichert den Pfad, den Sie buchstäblich angeben, als Zeichenfolge¹. Das heißt, Ihr Link ~/mylink
enthä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. ln
sieht den vollständigen Pfad und speichert ihn in Ihrem Symlink, der dann auf die richtige Stelle verweist.
¹ Mehr oder weniger.
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 .
$PWD
(den Pfad, den er verwendet hat, um dorthin zu gelangen) anstatt $(pwd -P)
(den kanonischen Pfad zum aktuellen Verzeichnis) verwenden. Wenn $PWD
nicht mehr auf das aktuelle Verzeichnis zeigt, gibt $(pwd -P)
es auch in der nächsten Minute kein Wort dafür .
"$PWD"
immer noch den alten Wert sehen, wenn das aktuelle Verzeichnis verschoben wird. PWD
nur bei dir einstellen cd
oder durch die shell initialisieren.
cd
garantiert 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.
mv
nachdem Sie es getan haben ln
, geraten Sie in die gleiche Situation. Auf der anderen Seite cd /long/logical/path/to/some/directory
möchten Sie nicht, dass der Link auf /vg0/lv1/user2/app4
(den kanonischen Pfad) /long/logical/path/to/some/directory
verweist, da der Link auf die falsche Stelle verweist, wenn er auf eine andere Stelle verweist.
"$PWD"
in POSIX-Shells und~0
inzsh
.