我开始学习操作系统,我尝试在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);
我对执行调用有什么了解吗?
答案 0 :(得分:2)
exec*e
函数家族不会自行扩展环境变量,它们只是将环境传递给新程序以进行其getenv
调用。
通话
execle("/bin/bash", "/bin/bash", "-c", "echo $DIR", NULL, env);
之所以有效,是因为您调用的shell会扩展$DIR
环境变量,而程序或execle
函数不会扩展它。