Créer une varaible environnement dans linux

a marqué ce sujet comme résolu.

Bonjour, je voudrais créer une varaible d’envrionnement linux dans un programme en C en bash je fais un export toto="tutu"

en c j’ai essayé avec putenv et setenv mais ils ne font rien, une fois mon programme lancé quand je fais un echo toto j’ai rien.

pourquoi ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main (void)
{
  printf ("Hello, world!\n");
  putenv("toto=tata");
  setenv("toto","tata",1);
  return 0;
}
+0 -0

Car une variable d’environnement ne remonte pas, elle n’est transmise qu’à des processus enfants. Si jamais tu faisais un fork() de ton programme afin d’en créer un autre depuis celui-ci, le nouveau programme verrait ta variable d’environnement toto.

Ici ton shell est né avant ton processus, il ne reçoit donc pas cette valeur après exécution de celui-ci.

+6 -0

Tu peux utiliser la commande source pour configurer un environnement depuis un exécutable. Il suffit que ton binaire affiche la liste des commandes bash à lancer :

1
2
3
4
5
int main(void)
{
    printf("export FOOBAR=\"SPAM !\"\n");
    return 0;
}

Après compilation, dans ton bash : source <(./a.out)

La variable d’environnement FOOBAR sera créée/mise à jour. Mais c’est bien plus simple d’utiliser un script bash…

Tu n’as pas le droit de modifier l’environnement d’execution de l’utilisateur. C’est assez logique ^^"

Par-contre, tu peux lui rendre un bash modifié … C’est moyen surtout si l’utilisateur n’est pas au courrant.

Exemple :

1
2
3
4
5
#include <stdlib.h>

int main(int argc, char* argv[]) {
    system("toto=tata bash");
}

Bans le bash, tu peux faire echo $toto

+0 -0

Ou utiliser une méthode communicante, comme par exemple en bash, tu définis un trap qui ira sourcer un fichier s’il existe lors de l’arrêt d’un fils. Donc coté bash, cela donne une ligne du genre:

1
trap '[[ -e /tmp/foobar.sh ]] && . /tmp/foobar.sh && rm -f /tmp/foobar.sh' CHLD

Ensuite, si la commande en C ou tout autre langage désire fournir des variables au bash appelant, il suffit que celui-ci crée le fichier /tmp/foobar.sh avec les variables à initialiser. Et dés que la commande rendra la main, le bash de façon transparente ira sourcer le fichier et ensuite l’effacera.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte