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.