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.
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 .
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é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, mvnachdem 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.
"$PWD"
in POSIX-Shells und~0
inzsh
.Du solltest benutzen:
oder:
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 .
quelle
$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 einstellencd
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 habenln
, geraten Sie in die gleiche Situation. Auf der anderen Seitecd /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.