2010-07-14 4 views
3

J'ai ce programme simple:Utilisation de la fonction getenv sous Linux

 
int main() 
{ 
    char* v = getenv("TEST_VAR"); 
    cout << "v = " << (v==NULL ? "NULL" : v) << endl; 
    return 0; 
} 

Ces lignes sont ajoutées au fichier .bashrc:

 
TEST_VAR="2" 
export TEST_VAR 

Maintenant, quand je lance ce programme à partir de la fenêtre de terminal (Ubuntu 10.04), il imprime v = 2. Si je lance le programme d'une autre manière: en utilisant le lanceur ou à partir d'Eclipse, il imprime NULL. Je pense que c'est parce que TEST_VAR est défini seulement dans shell bash. Comment puis-je créer une variable d'environnement Linux persistante, accessible dans tous les cas?

Répondre

3

Sur mon système (Fedora 13), vous pouvez faire des variables d'environnement grand système en les ajoutant sous/etc/profile.d /.

Ainsi, par exemple si vous ajoutez à un fichier dans /etc/profile.d/my_system_wide.sh

SYSTEM_WIDE="system wide" 
export SYSTEM_WIDE 

puis ouvrez une autre borne, il devrait la source ce, peu importe qui l'utilisateur ouvre la terminal

echo $SYSTEM_WIDE 
system_wide 
+0

Merci, cela a fait l'affaire. –

2

Ajoutez cela à .bash_profile (trouvé dans votre répertoire personnel). Vous devrez vous déconnecter et vous reconnecter pour que cela prenne effet.

En outre, puisque vous utilisez bash, vous pouvez combiner l'exportation et mis en une seule instruction:

export TEST_VAR="2" 
+0

.bash_profile n'existe pas sur mon ordinateur. J'ai créé un nouveau fichier et déplacé TEST_VAR. Après le redémarrage, TEST_VAR n'est pas disponible même dans le shell. –

1

Il n'existe pas de variable d'environnement à l'échelle du système sous Linux. Chaque processus a son propre environnement. Maintenant, par défaut, chaque processus hérite de son environnement de son parent, de sorte que vous pouvez obtenir quelque chose comme un environnement à l'échelle du système en s'assurant qu'un var est placé dans un ancêtre de chaque processus d'intérêt. Ensuite, tant qu'aucun autre processus ne modifie ce var, chaque processus d'intérêt le fera.

Les autres réponses ici donnent différentes méthodes de définition des variables. Par exemple, .bash_profile le définit dans chaque processus de connexion exécuté par un utilisateur, qui est le parent ultime de chaque processus exécuté après la connexion. /etc/profile est lu par chaque connexion bash par chaque utilisateur.

2

Désolé si je suis naïf mais n'est pas .bash_profile utile uniquement si vous utilisez bash comme shell par défaut?

Je «utilise parfois Linux et utilise principalement ksh. J'ai .profile donc peut-être vous devriez vérifier. * Profil et exporter la variable là.

Bonne chance :)