Verwenden von ~ in einem Symlink-Ziel oder Erstellen eines Symlinks mit einer Variablen


7

Ich möchte einen Symlink zu erstellen, ~/foo/aber wenn ich das schreibe, ~wird immer der absolute Home-Pfad aufgelöst. Ich habe ../s in der Vergangenheit verwendet und sie funktionieren gut, ist ~nicht erlaubt?

Der Grund, warum ich das tun möchte, ist, dass ~der Computer je nach Computer und Linux / OSX einen anderen absoluten Pfad hat, aber immer auf mein Home-Verzeichnis verweist.

Ich möchte einen solchen Link in ein Git-Repo aufnehmen, das auf mehreren Computern synchronisiert ist.


Vielleicht sollten Sie versuchen, die Variable $ HOME anstelle von zu verwenden ~.
— Vinz

Genau das möchte ich nicht tun, da $HOMEes immer gelöst wird, sobald ich den Link erstelle (nicht wahr?) Und daher maschinenabhängig ist.
— Jonathan H

Antworten:


6

Das Tilde-Zeichen wird von der Shell erweitert, bevor der Befehl ausgeführt wird. Es wird durch den Wert von ersetzt $HOME. Das lnDienstprogramm, das den Symlink erstellt, sieht also niemals die Tilde, sondern nur den vollständigen Pfad. Dieser Pfad wird im Symlink gespeichert.


Unter Linux gibt es keine Möglichkeit, eine Symlink-Variable zu erstellen. Sie werden vom Kernel verwaltet. Der Kernel berücksichtigt keine Umgebungsvariablen.


BSD erlaubt solche Links. Sie werden als variante symbolische Links bezeichnet . Sie können so etwas tun:

$ ln -s ’${variable}’ linkname
$ ls -l linkname
lrwxrwxrwx 1 root root 6 Sep 29 12:33 linkname -> ’${variable}’

Mit varsymdiesen Variablen kann dann gesetzt werden:

varsym variable=value cat linkname
[...] contents of file with name value [...]

2

Um Ihre Frage zu symbolischen Links zu beantworten, "ist ~ nicht erlaubt?".

Antwort: ~ ist nicht erlaubt. Sie können damit einen solchen Symlink erstellen, der jedoch nicht in das Ausgangsverzeichnis aufgelöst wird, wenn Sie ihn befolgen.

ln -s \~ d
ls -ld d
lrwxrwxrwx 1 steve steve 1 Sep 29 11:28 d -> ~
ls d
d
cd d
cd: d: No such file or directory

1
Also gut, ich denke, ich werde nur einen Link für jedes Repo erstellen.
— Jonathan H

Jedes Zeichen außer Nul und / ist in einer UNIX-Pfadnamenskomponente zulässig. Das Zeichen ~ auf der anderen Seite wird nur dann um bestimmte Shells erweitert, wenn das Zeichen in der Befehlszeile angezeigt wird. Diese Antwort ist also nicht hilfreich.
— schily
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.