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);
我要执行以下命令
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);