Forum Programmation.shell Fonction utile pour un .bashrc

Posté par  (site web personnel) .
Étiquettes : aucune
0
1
sept.
2004
Bonjour,

soucieux de ne plus développer de programmes en devant les installer sous le compte root, je me suis enfin décidé à peaufiner mon .bashrc pour inclure des répertoires au PATH et au LD_LIBRARY_PATH automatiquement si leur présence est avéree.

L'idée s'est d'appeler add_tail pour qu'il rajoute à PATH ou LD_LIBRARY_PATH les chemins indiqués, j'essaye donc de faire une fonction générique comme suit:

#!/bin/sh

# Fonction: add_tail #3 args
# Desc : Permet de rajouter en fin de variable un nouvel element
# en prenant soin de rajouter l'element separateur si
# nécessaire.
# Params : $1 Le nom de la variable à modifier
# $2 Element à rajouter
# $3 Element separateur

function add_tail()
{
local VARNAME=$1
local NEWTAIL=$2
local SEPARATOR=$3

if [ -n "${!VARNAME}" ] ; then
NEWTAIL="${SEPARATOR}${NEWTAIL}"
fi

# ligne qui merde
${VARNAME}="${!VARNAME}${NEWTAIL}"

}

for dir in "${HOME}/bin ${HOME}/opt/bin" ; do
if [ -d "${dir}" ] ; then
add_tail "PATH" "${dir}" ":"
fi
done


Seulement voilà il essaye toujours d'évaluer (ici éxécuter un prog dont le nom serait l'expansion du contenu pointé par VARNAME) la ligne "qui merde", je peux remplacer le membre de gauche par ${!VARNAME} ou ${VARNAME} ou $VARNAME ou... toujours le même résultat.


./plop.sh: line 13: PATH=/opt/arch/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/opt/mingw32-cross/bin:/opt/java/bin:/opt/ffmpeg/bin:/opt/hugin/bin:/opt/insight/bin:/opt/transcode/bin:/opt/yasm/bin:/home/edy/bin:/home/edy/bin:/usr/share: Aucun fichier ou répertoire de ce type


Toute suggestion le bienvenue
  • # Je suis trop fort qd mm

    Posté par  (site web personnel) . Évalué à 2.

    J'ai trouvé !

    Il faut rajouter eval devant la ligne qui merde :-) A noter que la boucle for était fausse il faut enlever les quotes.
  • # Peu etre inutile

    Posté par  . Évalué à 0.

    Sinon il existe dans le livre BLFS un ensemble de fonction qui font se genre de chose. Ca pourrait de permettre de comparer.
  • # CMT est peut-etre la solution

    Posté par  . Évalué à 1.

    Comme je l'avais annoncé dans un journal qui a eu son petit succes[1] (enfin bof), il y a un programme qui fait ca : c'est CMT [2].

    Il peut te configurer ton PATH, LD_LIBRARY_PATH et autres variables, tout comme tu veux.
    Et en plus une nouvelle version est sortie aujourd'hui (enfin c'est plus un bug-fix) [3].

    Il gère tres bien les gros projets de developpement, et (mais c'est mon avis et je le partage) pourrait tres avantageusement remplacer les autotools et automake.

    [1] : https://linuxfr.org/~bins/14899.html(...)
    [2] : http://www.cmtsite.org(...)
    [3] : http://www.cmtsite.org/ReleaseNotes.html(...)

    Voilà.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.