我尝试通过 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: 第 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;
}