2009-10-01 4 views
1

J'essaie d'afficher, définir & modifier la variable d'environnement PATH à partir d'un programme C. Je fais quelque chose comme ceci: -

char *cmd[] = { "echo", "$PATH", (char *)0 }; 
if (execlp("echo", *cmd) == -1) 

Mais je n'obtiens pas les résultats.

Répondre

1

Si vous voulez afficher $PATH, essayez ceci:

#include <stdlib.h> 

printf("PATH: %s\n",getenv("PATH")); 

si vous souhaitez le modifier, utilisez setenv() ou putenv().

0

essayez ceci:

char *cmd[] = { "$PATH", (char *)0 }; 
if (execlp("echo", cmd) == -1) 
+1

Non, cela ne fonctionne pas. –

6

Vous devez utiliser getenv(), il n'y a pas besoin de passer par une coquille:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    printf("PATH='%s'\n", getenv("PATH")); 

    return EXIT_SUCCESS; 
} 

Mais vous ne pouvoir changement la valeur . Les variables d'environnement sont héritées dans les processus enfants, mais l'enfant a sa propre copie. Vous ne pouvez pas changer l'environnement du shell à partir d'un programme différent, quelle que soit la langue dans laquelle il est écrit. Vous pouvez bien sûr changer la valeur de votre propre processus, mais ce n'est pas ce que vous avez demandé de faire.

Dans le shell lui-même, vous pouvez modifier ses paramètres d'environnement actuels, mais seulement là. C'est pourquoi vous devez utiliser "source" pour exécuter des scripts shell qui modifient l'environnement.

+0

Vous êtes rapide. J'ajouterai que vous pouvez saisir 'man getenv' pour la page de manuel très informative. – phoku

+0

Merci. La chose qui me ralentit le plus est la curieuse incapacité à taper des barres obliques inverses dans l'éditeur de démarques. :) – unwind

+0

se détendre, je n'avais jamais eu de problèmes avec les barres obliques inverses ... Mais cela doit avoir été la raison pour laquelle vous n'avez pas de guillemets fermants dans votre chaîne ;-) –

0
#include <stdio.h> 
#include <stdlib.h> 

... 

char *pPath; 
pPath = getenv("PATH"); 
if (pPath!=NULL) 
    printf ("The current path is: %s",pPath); 
putenv("PATH=somepath"); 

... 
0

De meilleures solutions déjà données, mais à titre d'explication; la variable $ PATH est analysée et traduite par le shell de commande, pas la commande echo elle-même. Les solutions déjà suggérées utilisent getenv() pour obtenir la valeur de la variable d'environnement à la place.

Pour appeler le shell de commande pour effectuer ceci:

system("echo $PATH") ; 

mais cette solution est un peu lourd, car il invoque un nouveau processus et l'ensemble du processeur de commande juste pour le faire.

Questions connexes