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.

Jonathan H.
quelle
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 [...]
Chaos
quelle
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
Steve
quelle
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