Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

variable PATH dans des scripts

94 réponses
Avatar
Kevin Denis
Bonjour,

je suis en train de mettre à jour différents scripts afin de les
adapter à différents environnements.

De manière générale (et c'est une question plus large), je vois
souvent des scripts démarrer par une définition des binaires utilisés,
comme par exemple:
#! /bin/sh
LS=/bin/ls
WC=/usr/bin/wc
echo le nombre de fichier est `LS|WC`

Ma première question est la suivante, pourquoi utiliser une définition
littérale alors que l'on peut utiliser PATH?
#! /bin/sh
PATH=/bin:/usr/bin
echo le nombre de fichier est `ls|wc`

Ma seconde question, plus spécifique à mon cas, puisque selon
l'architecture les binaires sont dans des lieux différents:
Mieux vaut il faire
#! /bin/sh
PATH=/opt/bin:/bin etc..

ou bien:
#! /bin/sh
if [ test archi ] then
LS=/bin/ls
else
LS=/opt/bin/ls
fi

etc..

Merci.
--
Kevin

10 réponses

6 7 8 9 10
Avatar
Jean-Marc Bourguet
Vincent Lefevre <vincent+ writes:

Je crois que tu n'as pas bien compris la sémantique de $ORIGIN.
Relis le message de Marc plus attentivement.


Le message de Marc n'est pas suffisamment clair. C'est quelque chose
qui n'est mentionné nulle part dans les outils de développements,
enfin juste dans la doc de ld sous Linux, mais aucune explication
du fonctionnement, et il a l'air de désigner autre chose: une adresse
mémoire (si c'est bien la fonctionnalité dont tu parles, comment cela
résout-il le problème des chemins?).


http://www.kernel.org/doc/man-pages/online/pages/man8/ld-linux.so.8.html

Et naturellement le Linker and Libraries Guide de Sun (mais naturellement,
on se demande toujours ce qui est différent... et ce qui a été copié)

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Vincent Lefevre
Dans l'article <4841860c$0$20540$,
Nicolas George <nicolas$ écrit:

Les fichiers INSTALL décrivent la procédure d'installation dans des
conditions normales, donc en particulier où les bibliothèques requises sont
installées dans les répertoires standards. Si tu veux faire quelque chose de
plus baroque avec ton système, tu en as le droit, mais tu es censé savoir
comment faire.


Installer des bibliothèques dans son home est aussi une procédure
normale (et d'ailleurs plus ou moins obligatoire pour les utilisateurs
qui n'ont pas d'accès root). Et c'est d'ailleurs pour cela que le
fichier INSTALL mentionne l'option --prefix (mais je rappelle, rien
concernant le run path).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Vincent Lefevre
Dans l'article ,
Jean-Marc Bourguet écrit:

http://www.kernel.org/doc/man-pages/online/pages/man8/ld-linux.so.8.html


Ah d'accord. Cela résout effectivement une partie des problèmes
(e.g. une application fournie avec ses propres bibliothèques).
Mais pas tous.

Le cas le plus tordu sous NFS, c'est probablement celui de GMP, dont
on peut vouloir installer un binaire par type processeur (sous des
chemins différents, donc), mais avec une seule version des applications
pour l'architecture en question.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Nicolas George
Vincent Lefevre wrote in message
<20080601203631$:
Le cas le plus tordu sous NFS, c'est probablement celui de GMP, dont
on peut vouloir installer un binaire par type processeur


Au moins chez GNU, ce problème est déjà géré par ld.so directement.

Avatar
Vincent Lefevre
Dans l'article <48431b0a$0$7877$,
Nicolas George <nicolas$ écrit:

Vincent Lefevre wrote in message
<20080601203631$:
Le cas le plus tordu sous NFS, c'est probablement celui de GMP, dont
on peut vouloir installer un binaire par type processeur


Au moins chez GNU, ce problème est déjà géré par ld.so directement.


Non, le ld.so.conf n'a que des chemins locaux à la machine et
uniquement appartenant à root. Dans le cas d'un utilisateur qui
veut installer sa propre bibliothèque accessible sur les machines
du réseau, le ld.so.conf ne résout rien.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


Avatar
Benoit SIBAUD
Bonjour,

De fait, l'immense majorité des systèmes GNU/Linux fonctionnent parfaitement
sans qu'il y ait besoin que LD_LIBRARY_PATH soit positionnée.


Pour citer un cas peu fréquent (une fois par an...) où le
LD_LIBRARY_PATH a un intérêt :
Cf
http://olivierberger.com/weblog/index.php/2008/05/18/103-declaration-d-impots-sous-debian-testing-difficultes-mais-contournement-trouve
«
Mais j'ai trouvé le contournement suivant pour que ça passe (après avoir
complètement quitté iceweasel) : lancer iceweasel depuis le répertoire
contenant libnss3.so, avec LD_LIBRARY_PATH positionnée à "." :

$ cd /usr/lib/iceweasel/
$ LD_LIBRARY_PATH=. iceweasel
»
(ça concerne au moins Debian Etch et Debian Sid)

Note : iceweasel est le firefox en marque blanche chez Debian.

Sinon on peut penser à des outils comme tsocks (« transparent socks »,
qui utilise LD_PRELOAD) ou valgrind (débogage/analyse, qui utilise
LD_LIBRARY_PATH), de manière transparente pour l'utilisateur.

Librement,

--
Benoît Sibaud

Avatar
Nicolas George
Vincent Lefevre wrote in message
<20080602024559$:
Non, le ld.so.conf n'a que des chemins locaux à la machine et
uniquement appartenant à root.


Je n'ai pas parlé de ld.so.conf.

J'ai l'impression que l'essentiel de tes reproches vient surtout de ta
méconnaissance des outils.

Avatar
Nicolas George
Benoit SIBAUD wrote in message <g20ag7$rsd$:
Pour citer un cas peu fréquent (une fois par an...)


Une fois par an, justement. Ce n'est pas l'utilisation quotidienne.

Avatar
Vincent Lefevre
Dans l'article <4843c14e$0$5025$,
Nicolas George <nicolas$ écrit:

Vincent Lefevre wrote in message
<20080602024559$:
Non, le ld.so.conf n'a que des chemins locaux à la machine et
uniquement appartenant à root.


Je n'ai pas parlé de ld.so.conf.

J'ai l'impression que l'essentiel de tes reproches vient surtout de ta
méconnaissance des outils.


Évidemment, ce sont des outils non documentés dans les procédures de
compilation/installation standard (et la page man de ld.so n'indique
rien qui pourrait résoudre le problème). Et tu ne me facilites pas la
tâche en n'expliquant rien.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


Avatar
Vincent Lefevre
Dans l'article <4843c19b$0$5025$,
Nicolas George <nicolas$ écrit:

Benoit SIBAUD wrote in message <g20ag7$rsd$:
Pour citer un cas peu fréquent (une fois par an...)


Une fois par an, justement. Ce n'est pas l'utilisation quotidienne.


N'empêche que cela justifie pleinement l'écriture d'un wrapper
modifiant le LD_LIBRARY_PATH (ceci dit, c'est ici suffisamment
simple pour qu'un wrapper ne soit pas réellement utile).

D'autre part, ce n'est qu'un exemple. L'utilisateur peut être
amené à faire le même genre de manip pour d'autres choses.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


6 7 8 9 10