execvp 忽略带有 ' 的参数

execvp ignore arguments with '

我要执行以下命令

ubus -S call network.interface status '{"interface": "lan"}'

在 C:

中有 execvp
char* arg[] = {"ubus", "-S", "call", "network.interface" , "status", "'{\"interface\": \"lan\"}'", NULL};
execvp(arg[0],arg);

但是命令不起作用。我进行了调查,发现原因是第 5 个参数 ('{"interface": "lan"}') 包含一个特殊字符 ',它看起来被 execvp.

忽略了

如何避免这个问题?

错误的路径.. 参数显示为 {"interface": "lan"} 而不是 '{"interface": "lan"}'。引号仅用于您的 shell,因此它知道内部的空格属于参数而不是两个参数之间的分隔符。 ubus 永远不会看到他们。

编辑: 最好说 ubus 应该 永远不会看到它们,因为在您的实现中,它会看到,而这只是ubus.

语法不正确

您还没有显示您的代码,但是等效的 execvp 调用看起来像这样:

char *args[] = {
    "ubus", "-S", "call", "network.interface", "status", "{\"interface\": \"lan\"}", NULL
};
execvp("ubus", args);