execle()를 사용할 때 환경변수 전달하는 문제인데요
글쓴이: study / 작성시간: 목, 2017/04/06 - 8:56오전
execle()를 사용해서 bash를 실행하고, 새로 실행되는 bash에 환경변수를 설정하려고 합니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(void)
{
char *env[] = {"TMOUT=60", NULL};
execle("/bin/bash", "bash", NULL, env);
return 0;
}
<code>
위와 같이 하고, 새로 실행된 bash에서 환경변수를 확인해보면 TMOUT이 설정되는 것이 보이는데요
아래와 같이 sudo를 사용해서 bash를 실행하면 환경 변수에 TMOUT이 설정되지 않네요.
<code>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(void)
{
char *env[] = {"TMOUT=60", NULL};
execle("/bin/sudo", "sudo", "/bin/bash", NULL, NULL);
return 0;
}
<code>
sudo를 써서 shell을 실행할 때는 환경변수 설정을 어떻게 하나요?Forums:


음 ..
$ man sudo ... -E, --preserve-env Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment. ...sudo 에 env 를 넘기고 -E 옵션을 주면 되지 않을까요..?
아니면, 아래처럼 실행할 때 환경 변수를 넘겨도 될 것 같네요.
execle("/bin/sudo", "sudo", "TMOUT=60", "/bin/bash", NULL, NULL);되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
답변 감사합니다.
위의 분이 알려주신대로 아래와 같이 code를 시험해 보니 잘 되네요 ^^
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(void) { execle("/bin/sudo", "sudo", "TMOUT=60", "/bin/bash", NULL, NULL); return 0; } <code> 그런데, 왜 putenv()는 안되는걸까요? 아래와 같이 해봤는데, 이렇게는 같은 결과가 안나오네요 <code> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(void) { putenv("TMOUT=60"); execle("/bin/sudo", "sudo", "/bin/bash", NULL, NULL); return 0; } <code> 혹시 putenv()를 써서는 안되는지 해보신분이 계시면 좀 알려주시면 감사하겠습니다. ~댓글 달기