Comment référencer une variable d'environnement dans le path

L`artiste

Membre confirmé
17 Septembre 2009
14
0
Bonjour à tous,
j'essaye désespérément de référencer une variable dans le path en l'ajoutant à /etc/paths.

L'ennui c'est lorsque j'ajoute $MY_VARIABLE/bin dans le fichier /etc/paths le $ n'est pas interprété.
Car lorsque je tape "env" dans le terminal, il ajoute "$MY_VARIABLE/bin" au lieu du chemin complet, bref la substitution ne se fait pas...
La variable MY_VARIABLE est correctement définie dans ~/.MacOSX/environment.plist et est interprétée lorsque je tape "env" dans le terminal.

J'espère que vous pourrez m'aider.

Merci à tous.
 
Je ne pense pas que dans /etc/paths ou les fichiers en-dessous de /etc/paths.d les valeurs soient interprétées.

Par ailleurs, il faut bien voir que tu mets dans un fichier de configuration général une variable que tu définis dans ton contexte de session personnelle. Ça ne marche pas bien de cette manière.

Si tu veux ajouter une valeur, il vaut mieux modifier le fichier ~/.bash_profile ou le fichier ~/.bashrc (ou les deux).
 
En mettant la variable d'environnement dans .MacOSX je gagne le fait que ce soit indépendant du shell invoqué, je ne me trompe pas ?

En ajoutant dans le path avec l'un ou les deux fichiers dont tu me parles, je serai coincé avec le bash non ?

L'idée principale qui m'est venue en passant par etc/paths est une indépendance vis-à-vis des shells et que je ne sois pas obligé de me connecter sur un shell pour que le path soit bon.
Existe-t-il une solution dans ce sens ?
 
1/ oui
2/ disons que ce ne serait valable que pour bash

Mais déjà je trouve peu logique de faire dépendre des données générales de variables au niveau utilisateur. Mais encore davantage pour les chemins, qui sont importants.

Est-ce si important que ce soit valable pour tous les shells ? Si c'est le cas, crée carrément un fichier que tu mettras dans /etc/paths.d.
 
Avec la solution de créer un fichier dans /etc/paths.d, j'aurai le même problème que /etc/paths ?

A savoir que ma variable d'environnement sera pas interprétée et que je devrai mettre un chemin absolu ?
 
Oui. Cela ne changera pas de ce côté-là [je pense que le contenu de ces fichiers n'est pas interprété pour résoudre les éventuelles variables d'environnement]. Par ailleurs je pense qu'ajouter un fichier personnel dans le répertoire /etc/paths.d est plus dans l'esprit que modifier le fichier /etc/paths directement.
Fait des tests avec path_helper pour voir ce qu'il en est.
 
Bloc de code:
macbook-pro-de-sebastien-delvaux:paths.d seb$ /usr/libexec/path_helper 
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:~/grails/grails-1.1.1:/usr/X11/bin"; export PATH;
macbook-pro-de-sebastien-delvaux:paths.d seb$ env
GRAILS_HOME=~/grails/grails-1.1.1 
GRAILS_HOME/bin=$GRAILS_HOME/bin 
TERM_PROGRAM=Apple_Terminal
TERM=xterm-color
SHELL=/bin/bash
TMPDIR=/var/folders/9R/9R7gozVNGn4FBD18h0xjAk+++TI/-Tmp-/
Apple_PubSub_Socket_Render=/tmp/launch-CJpfRd/Render
TERM_PROGRAM_VERSION=272
USER=seb
COMMAND_MODE=unix2003
SSH_AUTH_SOCK=/tmp/launch-RvY05a/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:91

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
PWD=/etc/paths.d
LANG=fr_BE.UTF-8
SHLVL=1
HOME=/Users/seb
LOGNAME=seb
DISPLAY=/tmp/launch-mz6HX1/:0
SECURITYSESSIONID=301952
_=/usr/bin/env

Apparemment path_helper construit bien le nouveau path mais il ne le sauvegarde pas... lorsque je tape env le path reste inchangé...
Aurais-je oublié quelque chose ?

---------- Nouveau message ajouté à 11h11 ---------- Le message précédent a été envoyé à 10h34 ----------

J'ai trouvé un lien intéressant :
http://littlesquare.com/2008/01/24/upgraded-to-leopard-making-use-of-etcpathsd-and-path_helper/

Ils disent en gros qu'on peut mettre des variables d'environnements ou des chemins absolus dans les fichiers contenus dans /etc/paths.d .
Mais apparemment il faudrait modifier le fichier /etc/profile et c'est là qu'il définit toutes ses variables d'environnement.
Mais je ne pense pas que ce soit compatible avec le .MacOSX/environment.plist...

Je ne sais pas quelle solution appliquer... J'aimerais pouvoir exploiter les variables d'environnement de .MacOSX... Mais si cela revient au même de le mettre dans /etc/profile...

Donc j'aimerais savoir à quoi sert ce fichier... et si c'est une bonne pratique de le modifier comme ça. Car d'après Apple le mieux est de passer par .MacOSX.

Donc j'aimerais si possible combiner .MacOSX et paths.d .
 
Bon j'ai opté pour la combinaison /etc/profile et /etc/paths.d .

Malheureusement cette solution n'a marché qu'une seule fois et dans un seul terminal, si j'ouvrais un nouveau tab ça ne marchait plus...
Erreur fatale j'ai redémarré et bien sûr ça ne marchait plus du tout...

Bloc de code:
macbook-pro-de-sebastien-delvaux:~ seb$ cat /etc/profile
# System-wide .profile for sh(1)

if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
fi

export GRAILS_HOME=~/grails/grails-1.1.1

if [ -x /usr/libexec/path_helper ]; then
       eval `/usr/libexec/path_helper -s`
fi
macbook-pro-de-sebastien-delvaux:~ seb$ cat /etc/paths.d/grails
$GRAILS_HOME/bin
macbook-pro-de-sebastien-delvaux:~ seb$ env
GRAILS_HOME=/Users/seb/grails/grails-1.1.1
TERM_PROGRAM=Apple_Terminal
TERM=xterm-color
SHELL=/bin/bash
TMPDIR=/var/folders/9R/9R7gozVNGn4FBD18h0xjAk+++TI/-Tmp-/
Apple_PubSub_Socket_Render=/tmp/launch-yZGENz/Render
TERM_PROGRAM_VERSION=272
USER=seb
COMMAND_MODE=unix2003
SSH_AUTH_SOCK=/tmp/launch-AEGT5N/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:91

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$GRAILS_HOME/bin:/usr/X11/bin

Donc là je suis vraiment coincé et en panne d'inspiration...
La variable d'environnement est bel et bien reconnue mais elle ne s'intègre pas au path...
J'ai bien effacé le dossier .MacOSX et son fichier environment.plist donc rien ne devrait interférer.
 
J'ai fait un petit essai et il est clair que path_helper ne résoud pas les variables d'environnement.
 
Et donc je dois déclarer la variable d'environnement avec le path complet dans /etc/profile ?

J'ai besoin de cette variable pour le frameworks de Grails... triste à dire mais avec Windows j'aurais déjà résolu le problème depuis longtemps (ça me file des crampes d'estomac de dire ça >_<)

Je dois donc mettre le path complet dans /etc/paths.d et déclarer la variable d'environnement dans /etc/profile ?