Script Bash pour créer des liens symboliques vers des bibliothèques partagées
Je pense que cette question est plutôt facile pour vous de scripts shell monstres.
Je suis à la recherche pour le plus élégant et le plus court chemin pour créer des liens symboliques pour les bibliothèques partagées pour Unix par le biais d'un shell bash script.
Ce dont j'ai besoin est de commencer avec une liste de partage de fichiers de bibliothèque comme "libmythings..1.1, libotherthings..5.11", obtenir les liens symboliques créés tels que:
libmythings.so -> libmythings.so.1 -> libmythings.so.1.1
libotherthings.so -> libotherthings.so.5 -> libotherthings.so.5.11
Les fichiers de bibliothèque sont à l'intérieur d'un répertoire qui contient d'autres fichiers comme les autres scripts shell.
MODIFIER: et Bien, "ldconfig -nN ." pourrait fonctionner, mais j'ai aussi besoin de ce lien, sans le plus grand nombre de la bibliothèque ajouté après ".alors, au moins l'une des bibliothèques, depuis une ou plusieurs bibliothèques sont les points d'entrée de la JNI appels à partir de Java, de sorte que lorsqu'une bibliothèque est instanciée par le biais de Système.loadlibrary("libraryname"), il s'attend à une bibliothèque appelée "libraryname.donc", pas "libraryname..X".
La solution avec juste ldconfig -nN pourrait fonctionner si il y avait une solution de contournement pour le Java.
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
J'ai triché - tous les liens à aller à la bibliothèque de base (libmythings..1.1); si vous voulez vraiment de la chaîne, alors vous avez besoin:
Méfiez - vous- code non testé.
Orgueil précède nemesis.
Commentaire est arrivé que le code ci-dessus ne fonctionne pas - et le commentaire est correct. Une version fixe avec le test in situ est:
Le changement est à la
sed
de commande. Cette version n'a pas d'imprimer quoi que ce soit par défaut (-n
), ne correspond qu'à des lignes se terminant par un point, suivi par les chiffres, puis supprime tout sauf ce suffixe, et imprime ce qui reste pour l'affectation à extn. Ainsi modifié, le script génère la sortie ci-dessous. Supprimer l'écho de l'obtenir pour exécuter la commande link.Le script illustre une intéressante et souvent négligée point sur les scripts shell: la séquence des opérations dans l'état de bloc d'un certain temps, n'a pas besoin d'être d'une seule commande. Le statut de la ligne avec l'opération d'édition n'affecte pas de savoir si le test comme un tout réussit; le statut de sortie de la dernière commande, le"
[ -n "$extn" ]
', contrôle si la boucle continue.Vous avez obtenu la bonne réponse, si je l'avais déjà fait par moi-même par le moyen de la "coupe de la commande". Merci.
OriginalL'auteur Jonathan Leffler
Je crois
ldconfig
est l'outil standard qui fait cela.Je me souviens de quelque part, il peut générer des liens symboliques basé sur des informations de version, mais ne peut pas trouver la source de la droite maintenant.
MODIFIER Oui, si vous exécutez
Vous verrez qu'il est de générer tous les liens à partir de la bibliothèque des éléments internes.
Ne fera que créer des liens pour les fichiers que dir
Une remarque cependant, j'ai joué avec elle et il ne semble pas constamment créer .donc$, juste ..{majeur}
Je ne suis pas sûr de savoir comment son fonctionnement interne de travail, mais ce que je sais:
Donc ce qui détermine la façon dont cela fonctionne est un mystère pour moi
Modifier Après Discetion, .la fichiers n'ont pas d'influence sur le comportement.
Le "SI" nom de domaine indique que le lien va être appelé.
Et il n'y aura qu'un seul.
0x000000000000000e (NOM) de la Bibliothèque de soname: [libmagix.so ]
C'est après le piratage du code et de remplacer le ".1" avec des espaces.
ldconfig généré "libmagic.ainsi " ( oui, espaces inclus )
OriginalL'auteur Kent Fredric
Dérivé du script de Jonathan Leffler (j'ai ajouté ce qu'un script appelé "liblinks" dans mon ~/bin )
OriginalL'auteur