Ich kann dies tun:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Aber ich würde das gerne können:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Ist das möglich? Kann ich den relativen Pfadnamen irgendwie auflösen und an übergeben ln
?
ln -s $(pwd)/bar.txt ~/
oder fügen Sie ein Installationsskript hinzu.ln -s foo/bar.txt /home/beau/bar.txt
Antworten:
Wenn Sie einen symbolischen Link zu einem relativen Pfad erstellen, wird dieser als relativer symbolischer Link gespeichert, der nicht absolut ist, wie in Ihrem Beispiel gezeigt. Dies ist im Allgemeinen eine gute Sache. Absolute symbolische Links funktionieren nicht, wenn das Dateisystem an einer anderen Stelle angehängt ist.
Der Grund, warum Ihr Beispiel nicht funktioniert, ist, dass es relativ zum übergeordneten Verzeichnis der symbolischen Verknüpfung ist und nicht, wo ausgeführt
ln
wird.Du kannst tun:
Oder für das zählt:
Es ist wichtig zu wissen, dass das erste Argument danach
ln -s
als Ziel des Symlinks gespeichert wird. Es kann sich um eine beliebige Zeichenfolge handeln (mit der einzigen Einschränkung, dass sie nicht leer sein darf und das Zeichen NUL nicht enthalten darf). Zum Zeitpunkt der Verwendung und Auflösung des Symlinks wird diese Zeichenfolge jedoch als relativer Pfad zu der Zeichenfolge verstanden Übergeordnetes Verzeichnis des Symlinks (wenn es nicht mit beginnt/
).quelle
~
funktionieren würde.Wenn Sie neuere Coreutils verwenden (ich verwende Coreutils-8.22-11), gibt es eine Option, um dies zu tun:
kann beliebigen Text enthalten; Wenn der Fehler später behoben wird, ist ein relativer Link -r, --relativ. Erstellen Sie symbolische Links relativ zur Position des Links
Zum Beispiel:
quelle
-r
. Mac benutzen.coreutils
> = 8,16 (Quelle: superuser.com/a/837935/403979 )Entschuldige Nein. Symbolische Links beziehen sich auf den Ort, an dem sich der Link befindet, nicht auf den Ort, an dem Sie den Link erstellt haben. Für dieses Verhalten gibt es mehrere gute Gründe. Die meisten betreffen das Mounten entfernter Dateisysteme.
quelle
Es gibt ein praktisches kleines Hilfsprogramm namens
symlinks
(ursprünglich von Mark Lords, jetzt von J. Brandt Buckley gepflegt), das in vielen Linux-Distributionen enthalten ist.So konvertieren Sie alle absoluten symbolischen Links in einem Verzeichnis in relative Links:
Leider gibt es keine Möglichkeit, einen einzelnen Link zu konvertieren. Sie müssen ihn zuerst in ein eigenes Verzeichnis verschieben.
quelle
Du könntest es versuchen:
Es wird jedoch eine symbolische Verknüpfung zum absoluten Pfadnamen hergestellt. In Ihrer Textfrage wird nach dem relativen Pfadnamen gefragt ...
Normalerweise ist ein relativer Pfadname das, was Sie wollen und was
ln -s
Sie erhalten. Ich denke, was Sie wollen, ist:quelle
Da die gängigsten Shells Pfade erweitern, sollten Sie zum Erstellen eines relativen Symlinks den "Quellpfad" angeben.
Auch der
-s
Parameter bedeutet--symbolic
.ln
Erstellt standardmäßig feste Links.quelle
Wenn Sie sicher sind, dass sich Ihre Mount-Punkte nicht ändern können, können Sie das erreichen, was Sie in einer Bash-Shell versuchen:
Dies setzt voraus, dass Sie sich beim Herstellen der symbolischen Verknüpfung im Zielverzeichnis befinden.
quelle