此问题已在此处有答案:
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);
1条答案
按热度按时间gmol16391#
这不是
execve
系统调用的工作方式。它永远不会查看PATH
或任何其他环境变量来搜索要执行的可执行文件。您必须提供有效的绝对或相对路径。此外,设置环境只影响执行的新程序,而不是当前程序。因此,即使使用
execvpe()
库函数来模拟shell在PATH
上的路径解析,它也会查看 * 环境变量PATH
* 的当前值,而不是作为环境传递给新进程的值。