Symlink zum aktuellen Ordner als absoluter Pfad, ohne den gesamten Pfad einzugeben

10

Symlinks sind gespeicherte Verknüpfungen für relative Pfade:

~/foo➤ ln -s . ~/bar/foo
~/foo➤ ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Die Datei ~/bar/foo ist ein Symlink zu bar s aktuelles Verzeichnis, d. h. sich selbst

Was ist, wenn ich in einem anderen Verzeichnis einen Symlink zu dem Verzeichnis erstellen möchte, in dem ich mich gerade befinde? Im obigen Beispiel bin ich dabei ~/foo und ich möchte schaffen ~/bar/foo als symbollink zu ~/foo. Mein aktuelles Verzeichnis kann natürlich etwas länger als 5 Zeichen sein und ist möglicherweise nicht so einfach einzugeben.

Gareth
quelle

Antworten:

13

Ich würde Typ sagen

ln -s $PWD ~/bar/

oder

ln -s `pwd` ~/bar/

Sie könnten auch verwenden

ln -s $PWD ~/bar/

aber ich schätze, das wussten Sie, und das ist es nicht, wonach Sie suchen. Könnten Sie bitte Ihre Frage aktualisieren, um zu erklären, was Ihr Ziel ist?

Wenn der Pfad Leerzeichen enthält, ist es ratsam, Folgendes zu verwenden:

ln -s "$PWD" ~/bar/
Huygens
quelle
2
Zitieren Sie Ihr $ Variablen und Befehlssubstitutionen, andernfalls werden Dateinamen mit Leerzeichen den Lauf stören. Sie brauchen das Ende auch nicht $(basename $PWD) (und du hast vergessen a $ (und quoting :-))) da dies ohnehin der Standard-Linkname ist.
Daniel Andersson
Ich glaube ich war dumm. Ich dachte, ich probierte es aus pwd Annäherung und etwas ging schief. Lassen Sie uns das auf einen ID-ten-T-Fehler zurückführen
Gareth
@DanielAndersson Sie haben Recht, dass es keine Leerzeichen im Pfad unterstützt. Guter Punkt. also für das Protokoll werde ich die Antwort aktualisieren :)
Huygens
3

Absolut:

ln -s "$(readlink -f .)" ~/bar

(Vielleicht gut für die Allgemeinheit in Skripten) oder einfach

ln -s ~/foo ~/bar

Verhältnismäßig:

ln -s ../foo ~/bar

Das Ausfüllen der Registerkarten hilft Ihnen bei der Eingabe.


Von grawitys Kommentar und http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Bemerkenswerte Änderungen in Release 8.16 (2012-03-26) [stabil]

...

ln akzeptiert jetzt die --relative Option, um eine relative symbolische Verknüpfung zu einem Ziel zu generieren, unabhängig davon, wie das Ziel festgelegt ist.

Also mit dieser Version:

ln -s --relative . ~/bar

sollte funktionieren (mit in der Praxis ist dein erstes Beispiel identisch mit dem Hinzufügen der --relative Schalter).

Daniel Andersson
quelle
4
Neueste coreutils kann relative relative Links automatisch mit erstellen ln -s -r foo ~/bar.
grawity
@Grawity: Interessant. Offenbar noch nicht auf meinem System (Debian Sid).
Daniel Andersson
Laut git scheint es am 22. März für v8.16 hinzugefügt worden zu sein.
grawity
1
Was ist auch der Vorteil von $(readlink -f .) Über $PWD?
grawity
2
@Grawity: Nicht viel. Sie funktionieren anders, wenn das aktuelle Arbeitsverzeichnis über einen Link erreicht wurde. readlink -f wird dann mit dem absoluten Zielpfad des aktuellen Verzeichnisses verknüpft, während $PWD Wird symlink zu dem wörtlichen Verzeichnis, in dem man sich gerade befindet. Was gesucht wird, ist wahrscheinlich von Zeit zu Zeit unterschiedlich und in erster Linie wahrscheinlich überhaupt kein Problem.
Daniel Andersson