c - execve 不接受环境参数

标签 c linux environment-variables execve

我想编写一个程序来执行 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] 只包含 lsexecve() 将找不到 ls 命令除非它在当前目录中。

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

关于c - execve 不接受环境参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598869/

相关文章:

java - 如何将环境属性读取到xml中

c - 如何实现在一个文件中查找单词然后写入另一个文件?

java - 为在 ubuntu 上使用 RunTime.exec() 运行的 Java 程序提供输入

linux - "used memory"高,但似乎不准确 - ksysguardd 与 htop 相比?

bash - 以编程方式创建 shell 变量

windows - Visual Studio 2019 路径中的非法字符

c - 无法指定矩阵乘法的起始行和结束行

c - 将部分添加到链接上的可执行文件

java - JNI 将 TreeMap 从 java 传递到 c

java - 如何在 Windows 7 平台上用 Java 运行 Linux 命令?