execve 不接受环境参数
execve not taking environment parameters
我想编写一个程序来执行 Linux ls
命令。
我真的只想输入 ls
而不是 /bin/ls
,所以我想使用 execve
(execvp
不是一个选项)。
我试过了:
char *env[] = { "SHELL=/bin/bash",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games",
"_=/usr/bin/env",
(char *)0 };
execve(parmList[0], parmList, env);
但它似乎不起作用,无法识别 ls
但可以识别 /bin/ls
。 parmList
没有任何问题,因为我用 execvp
试过了,它起作用了。
有什么想法吗?
如果 parmList[0]
只包含 ls
,execve()
将找不到 ls
命令,除非它在当前目录中。
对于 execve()
,环境中 PATH 的值无关紧要 — execve()
不使用它。您将使用 execvp()
(或 execvpe()
,如果可用)在当前进程的 PATH 上执行命令。
我想编写一个程序来执行 Linux ls
命令。
我真的只想输入 ls
而不是 /bin/ls
,所以我想使用 execve
(execvp
不是一个选项)。
我试过了:
char *env[] = { "SHELL=/bin/bash",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games",
"_=/usr/bin/env",
(char *)0 };
execve(parmList[0], parmList, env);
但它似乎不起作用,无法识别 ls
但可以识别 /bin/ls
。 parmList
没有任何问题,因为我用 execvp
试过了,它起作用了。
有什么想法吗?
如果 parmList[0]
只包含 ls
,execve()
将找不到 ls
命令,除非它在当前目录中。
对于 execve()
,环境中 PATH 的值无关紧要 — execve()
不使用它。您将使用 execvp()
(或 execvpe()
,如果可用)在当前进程的 PATH 上执行命令。