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}代码>