execle()环境变量不起作用

时间:2020-04-26 05:52:05

标签: c linux operating-system

我开始学习操作系统,我尝试在C语言中使用execle()系统调用,我有一个DIR环境变量,可以使用这样的环境数组将其设置为/ home

char* path = "/bin/ls";
char* myargs[4] = {"ls", "-la", "/home", NULL};
char *const env[] = {"DIR=/home", NULL};
execle(path, myargs[0], myargs[1], "$DIR", NULL, env);

但是当我编译并运行它时,得到以下输出 ls: cannot access '$DIR': No such file or directory

但是,这似乎很好 execle("/bin/bash", "/bin/bash", "-c", "echo $DIR", NULL, env);

我对执行调用有什么了解吗?

1 个答案:

答案 0 :(得分:2)

exec*e函数家族不会自行扩展环境变量,它们只是将环境传递给新程序以进行其getenv调用。

通话

execle("/bin/bash", "/bin/bash", "-c", "echo $DIR", NULL, env);

之所以有效,是因为您调用的shell会扩展$DIR环境变量,而程序或execle函数不会扩展它。