[libvirt] [PATCH 4/4] virsh: concatenate qemu-monitor-command arguments

Eric Blake eblake at redhat.com
Mon Aug 8 18:02:26 UTC 2011


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 at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list