如何用/bin/sh -c和execvpe()包装命令参数



目前我正在尝试编写一个程序,该程序接受用户的自定义命令和参数并执行它。

我正在尝试使用execvpe,可以同时传递命令args和env。

然而,我不知道在我的情况下调用execvpe的正确方法是什么。

例如这个命令输入:ps aux

我不想建立一个命令字符串,然后我需要小心转义引号和分号(即:JSON字符串),理想情况下只是传递作为数组中的一个参数。

我看到我可以在bash中直接运行它的唯一方法是这样:

/bin/sh -c "ps $0" aux

然而,我试着把它转换成execvpe:

char * argv[] = { "sh", "-c", ""ps \$0"", "aux", NULL };
execve("/bin/sh", (char **)argv, NULL);

然而,这给了我一个错误:

aux: ps $0: command not found

用execvpe来表述这个正确的方法是什么?

您在C代码中所做的相当于:

$ bash -c '"ps $0"' aux
aux: ps $0: command not found

你不能反斜杠双引号和美元符号。试试这个:{ "sh", "-c", "ps $0", "aux", NULL }

注:

最新更新