我正在尝试使用 execve 来运行 ls 命令。目前我正在使用以下参数运行它:
execve(args[0], args, env_args)
//args looks like {"ls", "-l", "-a", NULL}
//env_args looks like {"PATH=/bin", "USER=me", NULL}
我期望这样做是使用我的新 env_args 运行 ls 命令,这意味着它将在我的 PATH 中查找 ls。然而,这段代码实际上并没有做任何事情,当我运行代码时,它只是返回到我的命令提示符而没有输出。
使用相同的 args[] 我正在使用 execvp 和 ls 工作并搜索了我当前的路径。
你能告诉我我做错了什么吗?
我想做的是编写我自己的 shell 程序,我可以在其中创建和导出自己的环境,并让 exec 使用我在 char** 中定义的环境。本质上,我正在编写自己的函数来对 env_args 进行操作以添加和删除变量,当我调用 exec 时,我希望能够在 {"ls", "-l", NULL} 上调用 exec 并让它查看我的新环境名为 ls 的有效程序的路径变量。我希望这能更好地解释我正在做的事情。我不认为 extern environ var 在这种情况下对我有用。