【发布时间】:2015-11-23 10:38:41
【问题描述】:
我尝试通过 execve() 运行多个命令(或使用简单的输出重定向)。
当我输入这个时(当然,在我将这个字符串传递给函数之前,我将其拆分为空格并将每个空格分别放入 char* []):
"bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' "
到 execve() 函数,我有一个错误:
/usr/bin/cat: -c: line 0: 寻找匹配的'''时出现意外的EOF
/usr/bin/cat: -c: line 1: 语法错误:文件意外结束
这是我使用 完全 execve() 函数运行多个 linux 命令(位于 PATH 中的应用程序)的建议(出于安全原因)
但是这个解决方案并没有像我预期的那样工作。
有解决我的解决方案的想法吗?也许我可以使用 execve() 否则,但我不知道如何..
编辑:添加了简化(对不起,由于公司限制,我无法粘贴原始形式)源代码:
int foo(const char *cmdline)
{
char d[] = "bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' ";
args = strtok(d, " ");
counter = 0;
while (args != NULL)
{
cmdline_args[counter++] = args;
args = strtok(NULL, " ");
}
cmdline_args[counter] = '\0';
switch (pid = fork()) {
case -1:
ret = -1;
case 0: // for execve
status = execve(cmdline_args[0], cmdline_args, env);
exit(status);
default: // for parent pid
if (waitpid(pid, &status, 0) < 0) {
// in case when waitpid failed
}
}
return ret;
}
【问题讨论】:
-
错误消息告诉您在传递给
execve()的字符串中某处有一个不匹配的引号。检查字符串并发布相关代码。 -
展示你的C代码,什么时候展示更容易帮助
-
我添加了代码。我想这足以理解函数的含义。 @BlueMoon 我也这么认为,但我不知道哪里有 bug。