execvp忽略带有';

execvp忽略带有';,c,linux,execvp,C,Linux,Execvp,我想执行以下命令 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); 但是这个命令不起作用。我进行了调查,发现原因是第五个参数('{“接口”:“la

我想执行以下命令

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);
但是这个命令不起作用。我进行了调查,发现原因是第五个参数(
'{“接口”:“lan”}
)包含一个特殊字符
'
,它看起来被
execvp
忽略了


如何避免此问题?

路径错误。。参数的内容为
{“interface”:“lan”}
而不是
{“interface”:“lan”}
。引号仅用于shell,因此它知道内部的空格属于参数,而不是两个参数之间的分隔符<代码>ubus将永远看不到它们


编辑:最好说
ubus
不应该看到它们,因为在您的实现中,它确实看到了,这只是
ubus
的语法不正确。。参数的内容为
{“interface”:“lan”}
而不是
{“interface”:“lan”}
。引号仅用于shell,因此它知道内部的空格属于参数,而不是两个参数之间的分隔符<代码>ubus将永远看不到它们


编辑:最好说
ubus
不应该看到它们,因为在您的实现中,它确实看到了它们,这只是
ubus

的语法不正确。您没有显示代码,但是一个等价的
execvp
调用看起来像这样:

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

您尚未显示代码,但等效的
execvp
调用如下所示:

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

“execvp忽略带有“”的参数”不会。尝试将
ubus
替换为
echo
。另外
arg
会丢失尾随的
NULL
哨兵。它应该是
char*arg[]={…,NULL}“execvp忽略带“”的参数”不会。尝试将
ubus
替换为
echo
。另外
arg
会丢失尾随的
NULL
哨兵。它应该是
char*arg[]={…,NULL}