Dynamische Symlinks


10

Ich habe meine App für verschiedene Architekturen erstellt und möchte einen "dynamischen Symlink" erstellen, der mich anhand einer Variablen zur richtigen Version führt.

Wenn der Computer, auf dem ich derzeit angemeldet bin, x86 ist, sollte mich der Symlink zu diesem Build führen.

Ein verspottetes Beispiel dafür, was ich tun möchte:

$ uname -i
x86_64

$ ls -ltr 
lrwxr-xr-x  1 dogbane gg     4 Feb 16 15:40 mylink -> @sys/
drwxrwxr-x  2 dogbane gg  2048 Feb 16 15:40 x86_64/
drwxrwxr-x  2 dogbane gg  2048 Feb 16 15:40 i386/

$ cd mylink

$ pwd -P
~/x86_64

Ist das möglich?

Ich weiß, dass ich verwenden kann cd $(uname -i), möchte aber etwas Einfacheres.


Kennen Sie OpenAFS? Weil @sys genau so verwendet wird, sogar mit '@sys'. Wenn ja, suchen Sie nach einer Alternative zu OpenAFS?
jsbillings

@jsbilling Ich würde gerne wissen, ob dies auf einem Standard-Dateisystem ohne AFS möglich ist. Ich habe vor langer Zeit an AFS gearbeitet und konnte dies tun, weshalb ich gefragt habe.
Dogbane

Das habe ich mir gedacht. Ich kenne kein anderes Dateisystem mit 'magischen' Symlinks außer der Einstellung vfs.generic.magiclinks von NetBSD. ( daemon-systems.org/man/symlink.7.html )
jsbillings

Es gibt solche Umgebungen, z. B. Ruby und Perl, sodass Sie auswählen können, welche Version Sie beim Testen verwenden möchten. Inspiration finden Sie unter rvm.io/rubies .
Jenny D

Antworten:



2

Symbolische Links sind statisch: Das Dateisystem speichert nur eine Zeichenfolge, und Zugriffe auf die symbolische Verknüpfung werden zu der Datei umgeleitet, deren Name (relativ zum Speicherort des Symlinks) diese Zeichenfolge ist.

Es wäre einfach, ein FUSE- Dateisystem zu schreiben , das solche dynamischen Symlinks verfügbar macht, aber ich kenne kein vorhandenes.


2

Ich gehe davon aus, dass dies Binärdateien sind, also würde ich es mit einem PATH-Variablen-Rater als Symlink tun.

PATH=$PATH:/base/$ARCH/bin.

Wenn Sie ein Werkzeug wie Cfengine oder Puppet verwenden. Basierend auf der Systemarchitektur kann ein Symlink zum entsprechenden Verzeichnis erstellt werden.


1

Wenn Sie nur eine einfachere Syntax eingeben möchten als:

cd $(uname -i)

Sie könnten es in eine Variable setzen wie:

 s=`uname -i` 

in Ihrem Anmeldeskript, so können Sie einfach tun

 cd $s

Wenn Sie cd möchten


0

symlink ist im Wesentlichen eine Datei mit einem speziellen Flag, das einen Pfad enthält, und dieser Pfad wird so interpretiert, wie er ist. Sie können also keinen Symlink erstellen, um auf diese Weise auf andere Speicherorte zu verweisen. Möglicherweise schreiben Sie dennoch ein Skript, das einen geeigneten Build ausführt.

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.