Die einfachste Möglichkeit, eine Verknüpfung zum aktuellen Verzeichnis als absoluten Pfad herzustellen, ohne die gesamte Pfadzeichenfolge eingeben zu müssen, wäre
ln -s "$(pwd)/foo" ~/bin/foo_link
Das target
(erste) Argument für den ln -s
Befehl bezieht sich auf die Position des symbolischen Links und nicht auf Ihr aktuelles Verzeichnis. Es ist hilfreich zu wissen, dass der erstellte Symlink (das zweite Argument) einfach den Text enthält, den Sie für das erste Argument angegeben haben.
Wenn Sie also Folgendes tun:
cd some_directory
ln -s foo foo_link
und dann diesen Link bewegen
mv foo_link ../some_other_directory
ls -l ../some_other_directory
Sie werden sehen, dass foo_link
versucht wird, foo
auf das Verzeichnis zu verweisen, in dem es sich befindet. Dies funktioniert auch mit symbolischen Links, die auf relative Pfade verweisen. Wenn Sie Folgendes tun:
ln -s ../foo yet_another_link
Wechseln Sie dann yet_another_link
in ein anderes Verzeichnis, und überprüfen Sie, wo es hinweist. Sie werden feststellen, dass es immer auf verweist ../foo
. Dies ist das beabsichtigte Verhalten, da symbolische Verknüpfungen oft Teil einer Verzeichnisstruktur sein können, die sich in verschiedenen absoluten Pfaden befinden kann.
In Ihrem Fall, wenn Sie den Link durch Eingabe erstellen
ln -s foo ~/bin/foo_link
foo_link
enthält nur einen Link zu foo
, relativ zu seiner Position. Wenn Sie $(pwd)
den Namen des Zielarguments voranstellen, wird lediglich der absolute Pfad des aktuellen Arbeitsverzeichnisses hinzugefügt, sodass die Verknüpfung mit einem absoluten Ziel erstellt wird.
source_file
(erste) Argument ist die Stelle, an der der Link verweist. Dastarget_file
(zweite) Argument wird zum Namen des Links, es sei denn, Sie geben ein Verzeichnis ein. In diesem Fall ist der Linkname derselbe wie der Basisname des, der sichsource_file
jedoch im Verzeichnis befindettarget_file
.ln
-Manpage,target
ist das erste Argument (wo die Anlenkpunkte auf ) , wohingegen das zweite Argument ist einfach als dielink
(source
nicht erwähnt).target
und das zweite Argument auflink
( man7.org/linux/man-pages/man1/ln.1.html ). Aber in BSD (einschließlich OS X) heißt der erstesource
und der zweitetarget
( freebsd.org/cgi/man.cgi?ln ). Ziemlich verwirrend.Wenn Sie das
-r
(--relative
) -Flag verwenden, funktioniert Folgendes:quelle
-r
Beachten Sie, dass dies ein GNUism ist, dh kein POSIX, und daher im OP-Fall nicht funktioniert, da der Standard-OS-X-ln
Befehl BSD-basiert ist.Um etwas Tipparbeit zu sparen, können Sie dies tun
quelle
*
,?
und[...]
).bash
, daher ist es im Allgemeinen eine gute Idee, sie zu zitieren. Mein schlechtes, ich hätte genauer sein sollen.Wie wäre es mit:
quelle