Pour modifier des variables comme LD_LIBRARY_PATH ou PYTHONPATH, je regarde si la variable existe, auquel cas je concatène la valeur courante avec ma nouvelle valeur séparée par un ':'. Sinon je crée tout simplement une nouvelle variable.
NEW_PATH='/path/to/new/path'
if [ $LD_LIBRARY_PATH ]
then
export LD_LIBRARY_PATH=$NEW_PATH:$LD_LIBRARY_PATH
else
export LD_LIBRARY_PATH=$NEW_PATH
fi
Cette méthode est un peu lourde quand elle se répète souvent dans un script. Existe-t-il une astuce pour simplifier cette syntaxe ?
Merci beaucoup !
# plop
Posté par benja . Évalué à 4.
2 rien
[^] # Re: plop
Posté par Charles Flèche (site web personnel) . Évalué à 1.
Je peux demander une explication sur la syntaxe employée ?
[^] # rtfm
Posté par mxt . Évalué à -1.
[^] # Re: plop
Posté par Kerro . Évalué à 3.
En créant une fonction c'est moins "optimisé", mais lisible: concatenation '/path/to/new/path' $LD_LIBRARY_PATH
[^] # Re: plop
Posté par JoeltheLion (site web personnel) . Évalué à 1.
[^] # Re: plop
Posté par Ronan BARZIC . Évalué à 1.
$NEW_PATH${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} (et je ne sais pas si c'est autorisé) - C'est un peu dur de savoir si :+: est un operateur ou si c'est :+:$ ou :+ suivi de :$
Je me suis amusé à chercher sous Google, et bien c'est pas "évident". J'ai essayé via man bash en faisaint une recherche mais il n'a pas trouvé, probablement à cause de la signification de : ou + (je ne suis pas un expert des regexps dans man/less/etc...)
J'ai du faire ca dans Emacs, et j'ai trouver ca :
${parameter:+word}
Use Alternate Value. If parameter is null or unset, nothing is
substituted, otherwise the expansion of word is substituted
Je pense que c'est la solution mais dans la réponse donnée au dessus, c'est :+:
Pas évident - Donc la demande d'explication de syntaxe n'était pas si idiote
Attention avant de répondre RTFM....
[^] # Re: plop
Posté par JoeltheLion (site web personnel) . Évalué à 2.
Tout ce que je dis, c'est que cette syntaxe est du bash standard, du coup, dire que c'est illisible est un peu idiot... D'accord, la syntaxe de bash n'est pas toujours des plus claires, mais quitte à utiliser bash, autant l'utiliser complètement :)
[^] # Re: plop
Posté par 태 (site web personnel) . Évalué à 2.
Parce qu'il faut ajouter un ':' entre $NEW_PATH et $LD_LIBRARY_PATH ! Le "word" ajouté est ':$LD_LIBRARY_PATH'.
# Ajoute à la fin
Posté par Sytoka Modon (site web personnel) . Évalué à 2.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NEW_PATH
[^] # Re: Ajoute à la fin
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 2.
Sinon vu le peu d'impact moi je me prendrais pas la tête avec des if/... effectivement
export LD_LIBRARY_PATH=$NEW_PATH:$LD_LIBRARY_PATH
marchera bien
[^] # Attention DANGER
Posté par JJD . Évalué à 4.
Effectivement ta méthode marchera bien... dans la plupart des cas.
Si LD_LIBRARY_PATH n'est pas défini, tu vas te retrouver avec quelque chose comme ça :
LD_LIBRARY_PATH=/nouveau/chemin:
Ce qui fait que les bibliothèques dynamiques vont être recherchées d'abord dans /nouveau/chemin, puis dans le répertoire courant (impact du : à la fin), ce qui ne semble pas être l'effet recherché et qui peut être dangereux.
A+
JJD
[^] # Re: Attention DANGER
Posté par shbrol . Évalué à 2.
Et puis j'ai testé... bien vu. Mais pourquoi ce comportement étrange ?
[^] # Re: Attention DANGER
Posté par JJD . Évalué à 2.
Il s'agit peut-être d'un bug (de la libc6 ?) mais je n'ai pas trouvé (ni beaucoup cherché) de rapport à ce sujet.
# Restons simples...
Posté par ymorin . Évalué à 3.
LD_LIBRARY_PATH="${newpath_1}:${LD_LIBRARY_PATH}"
LD_LIBRARY_PATH="${newpath_2}:${LD_LIBRARY_PATH}"
# etc...
LD_LIBRARY_PATH="${LB_LIBRARY_PATH%:}"
Comme ça tu ne te casses pas avec des lignes ignobles, et tu vires le ':' seulement à la fin, au cas où le LD_LIBRARY_PATH initial était vide.
Et si tu veux ajouter à la fin :
LD_LIBRARY_PATH+=":${newpath_1}"
LD_LIBRARY_PATH+=":${newpath_2}"
# ...
LD_LIBRARY_PATH="${LB_LIBRARY_PATH#:}"
Voila...
[^] # Re: Restons simples...
Posté par Charles Flèche (site web personnel) . Évalué à 1.
[^] # Re: Restons simples...
Posté par benoar . Évalué à 2.
[^] # Re: Restons simples...
Posté par zerkman (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.