Выполнение "echo $ PATH" из программы c? - PullRequest
1 голос
/ 01 октября 2009

Я пытаюсь отобразить, установить и изменить переменную среды PATH из C-программы Я делаю что-то вроде этого: -

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

Но я не получаю результаты.

Ответы [ 5 ]

6 голосов
/ 01 октября 2009

Вы должны использовать <a href="http://www.manpagez.com/man/3/getenv/" rel="nofollow noreferrer">getenv</a>(), нет необходимости проходить через оболочку:

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

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

   return EXIT_SUCCESS;
}

Но вы не сможете изменить значение. Переменные среды наследуются в дочерние процессы, но дочерняя имеет свою собственную копию. Вы не можете изменить среду оболочки из другой программы, независимо от того, на каком языке она написана. Конечно, вы можете изменить значение своего собственного процесса, но это не то, что вы просили сделать.

В самой оболочке вы можете изменить ее текущие настройки среды, но только там. Вот почему вам нужно использовать «источник» для запуска сценариев оболочки, которые изменяют среду.

1 голос
/ 01 октября 2009

Если вы хотите отобразить $PATH, попробуйте это:

#include <stdlib.h>

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

, если вы хотите изменить его, используйте setenv() или putenv().

0 голосов
/ 01 октября 2009

Лучшие решения уже даны, но в порядке объяснения; переменная $ PATH анализируется и транслируется командной оболочкой, а не самой командой echo. Уже предложенные решения используют getenv () для получения значения переменной окружения.

Чтобы вызвать командную оболочку для выполнения этого:

system( "echo $PATH" ) ;

но это решение несколько тяжелое, так как оно просто вызывает новый процесс и весь командный процессор.

0 голосов
/ 01 октября 2009
#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 голосов
/ 01 октября 2009

попробуйте это:

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