execve()中的路径扩展[重复]

m1m5dgzv  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(112)

此问题已在此处有答案

Running executables present in the PATH environment using execve(2个答案)
上个月关门了。
我按照另一个thread说的话做了。
我使用execve()和一个环境变量PATH,将其设置为/bin,以便能够在不使用绝对路径的情况下调用命令。但是函数execve()仍然不能识别像ls这样的命令。只有/bin/ls可以工作。会是什么问题呢?

char *envList[3] = {"HOME=/root", "PATH=/bin", NULL };
execve(command[0], command, envList);
gmol1639

gmol16391#

这不是execve系统调用的工作方式。它永远不会查看PATH或任何其他环境变量来搜索要执行的可执行文件。您必须提供有效的绝对或相对路径。
此外,设置环境只影响执行的新程序,而不是当前程序。因此,即使使用execvpe()库函数来模拟shell在PATH上的路径解析,它也会查看 * 环境变量PATH* 的当前值,而不是作为环境传递给新进程的值。

相关问题