不执行环境参数

时间:2015-11-08 20:47:01

标签: c linux environment-variables execve

我想编写一个执行Linux ls命令的程序。 我真的只想输入ls而不是/bin/ls,所以我想使用execveexecvp不是选项)来执行此操作。

我试过了:

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尝试了这一点并且有效。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果parmList[0]仅包含ls,则execve()将找不到ls命令,除非它位于当前目录中。

使用execve(),环境中PATH的值无关紧要 - execve()不使用它。您可以使用execvp()(或execvpe()如果可用)在当前进程的PATH上执行命令。