#include <stdio.h>
int main()
{
setenv("PATH","/mypath",1);
printf("%s\n",getenv("PATH"));
return(0);
}
Вышеуказанные программные выходы:
/mypath
Если вы выполните env в bash после вашей программы на C, вы получите значение PATH, которое по умолчанию установлено для bash.
$ env
...
PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/bin
...
Это потому, что переменные среды изменяются только для того конкретного процесса, на котором выполняется программа C, а не для процесса, выполняющего bash.
Edit:
Запись env.c как:
#include <stdio.h>
int main()
{
printf("%s\n",getenv("PATH"));
return(0);
}
с последующим:
$ gcc env.c
$ export PATH=/bin
$ ./a.out
дает:
/bin
Я не понимаю, почему все должно быть иначе. (Вы сделали все шаги, которые я сделал выше?)