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