On 08/08/2011 03:40 AM, Daniel P. Berrange wrote:
On Fri, Aug 05, 2011 at 06:00:08PM -0600, Eric Blake wrote:
> Call me lazy, but:
>
> virsh qemu-monitor-command dom --hmp info status
>
> is nicer than:
>
> virsh qemu-monitor-command dom --hmp 'info status'
This does introduce a quoting problem though. eg consider
virsh qemu-monitor-command dom --hmp 'foo "Hello World"'
vs what you'd now allow:
virsh qemu-monitor-command dom --hmp foo "Hello World"
This is no different from how the shell behaves. If you _want_ literal
quotes to be part of the command, then you have to double-quote or
otherwise escape those quotes. Here's some examples using two spaces to
show where spacing is quoted vs. where concatenation occurs, in both
shell and virsh.
$ echo a "b c"
a b c
$ echo 'a "b c"'
a "b c"
$ echo a \"b c\"
a "b c"
$ virsh echo a 'b c'
a b c
$ virsh echo 'a "b c"'
a "b c"
$ virsh echo a \"b c\"
a "b c"
$ virsh
virsh # echo a "b c"
a b c
virsh # echo 'a "b c"'
a "b c"
virsh # echo a \"b c\"
a "b c"
virsh # exit
>
> - if (vshCommandOptString(cmd, "cmd",&monitor_cmd)<= 0) {
> - vshError(ctl, "%s", _("missing monitor command"));
> + while ((opt = vshCommandOptArgv(cmd, opt))) {
> + virBufferAdd(&buf, opt->data, -1);
> + if (pad)
> + virBufferAddChar(&buf, ' ');
> + pad = true;
> + }
...this loop will loose the quoting on 'Hello World' I believe.
The shell already lost the quoting. Virsh should not be using
heuristics to re-add arbitrary quoting, rather, if you need quoting to
be passed through to the monitor command, you _have_ to use
double-quoting or escapes. Your argument about losing quotes does not
change this patch. Argument concatenation is most useful only for words
that do not themselves contain quoting or spaces.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org