考虑这个简单的C程序
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
if (fork() == 0)
{
execl("script.sh", "script.sh", NULL);
exit(EXIT_FAILURE);
}
int status;
wait(&status);
if (WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS)
{
return 0;
}
return -1;
}
script.sh
为
#!/bin/bash
case $DEBUG in
true)
echo "Debug mode on"
;;
*)
echo "Debug mode off"
;;
esac
如果我使用gcc -o foo main.c
编译C程序并使用
DEBUG=true ./foo
然后输出为Debug mode on
,因此即使我没有使用foo
,脚本实际上也获得了我传递给程序execle
的环境变量。那么在哪种情况下有必要使用execle
(除了不想直接在源代码中指定环境变量之外)?我说的是人们在做类似的事情
extern char **environ;
...
execle(path, path, NULL, environ)
这是什么目的?
答案 0 :(得分:5)
当您不希望继承环境时(您希望可执行文件以空环境或专门为其设置的环境开头)。