使用execve()时寻找匹配的`''时出现意外的EOF

马斯卡洛尔

我尝试通过execve()运行多个命令(或使用简单的输出重定向)。

当我放置它时(当然,在将该字符串传递给函数之前,我将其分成多个空格,并将每个空格分别放入char * []):

"bash -c ' /usr/bin/cat /root/script.sh > /root/script1.sh ' "

到execve()函数,出现错误:

/ usr / bin / cat:-c:第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;
}
德拉戈什

如果这样做,对我有用:

cmdline_args[0] = "bash";
cmdline_args[1] = "-c";
cmdline_args[2] = "/usr/bin/cat /root/script.sh > /root/script1.sh";
cmdline_args[3] = NULL;

因此,问题在于您要在中处理整个命令行字符串strtok因此,它将bash获得多个参数(不仅是一个参数,还包括整个命令字符串)。bash可能只是解释第一个命令参数,所以您最终将执行'命令...

也许有更好的方法可以做到这一点...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

寻找匹配的“”'时出现意外的EOF

寻找匹配的`''时出现意外的EOF

寻找匹配``'时出现意外的EOF

寻找匹配的“”“时出现意外的EOF

使用sed时寻找匹配的`''时出现意外的EOF

寻找匹配的“”问题时出现意外的EOF

为Cron工作寻找匹配的“”“时出现意外的EOF

Bash/Osascript 错误:寻找匹配的“)”时出现意外 EOF

EOL 错误(寻找匹配的‘)’时出现意外的 EOF)

寻找匹配的`''时出现意外的EOF(Xcode 11.1)

错误:在寻找匹配的 `'' 时出现意外的 EOF

bash:寻找匹配项时出现意外的EOF

寻找匹配的“”“时出现意外的EOF-bash脚本

寻找匹配的“”“ shell脚本时出现意外的EOF

寻找匹配的“”时出现意外的 EOF ubuntu 20.04

SyntaxError:解析时出现意外的EOF

寻找匹配的“”时出现意外的 EOF 语法错误:文件意外结束

bash.profile在查找匹配的“”“时出现意外的EOF

为什么会出现这些错误-寻找匹配的')'时出现意外的EOF

在sudo上使用'-c'标志时出现意外的EOF

bash错误-在制表符补全中寻找匹配的“”时出现意外的EOF

bash for循环中的ffmpeg:寻找匹配的`}'时出现意外的EOF

寻找匹配的“”时出现意外 EOF - bash 简单脚本

/bin/sh: -c: line 0: 寻找匹配的‘"’时出现意外的 EOF

bash脚本sed命令在寻找匹配的“”“时出现意外的EOF

Ansible 错误:/bin/sh: -c: line 0: 寻找匹配时出现意外 EOF”

Python 3.6请求SSLerror“读取时出现意外的eof”

Golang:读取Gzip Reader时出现意外的EOF错误

解析时出现意外的EOF:网页抓取