【问题标题】:execle() environment variable not workingexecle() 环境变量不起作用
【发布时间】:2020-04-26 05:52:05
【问题描述】:

我开始学习操作系统,我尝试在 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);

我对 execle 调用有什么理解错误吗?

【问题讨论】:

    标签: c linux operating-system


    【解决方案1】:

    exec*e 系列函数本身并不扩展环境变量,它们只是将环境传递给新程序以进行 getenv 调用。

    电话

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

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

    【讨论】:

    • 明白。谢谢你的快速反应。所以这就是像 execle("/bin/bash", "/bin/bash", "-c", "ls -la $DIR", NULL, env) 这样的东西会起作用的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2020-11-25
    • 1970-01-01
    • 2015-09-27
    • 2020-10-04
    • 2021-03-30
    相关资源
    最近更新 更多