Continuing from what I did in commit
4817dec0, now I want to write a
sequence that is self-documenting. So I need comments :)
Now I can do something like:
$ virsh -c test:///default '
# setup
snapshot-create-as test s1
snapshot-create-as test s2
# check
snapshot-list test --name
'
Note that this does NOT accept comments in argv mode, another patch
will tackle that.
(If I'm not careful, I might turn virsh into a full-fledged 'sh'
replacement? Here's hoping I don't go that far...)
Signed-off-by: Eric Blake <eblake@redhat.com>
Acked-by: Michal Privoznik <mprivozn@redhat.com>
DO_TEST(38, "a\nb\n", "ec\\\nho a\n echo \\\n b;");
DO_TEST(39, "a\n b\n", "\"ec\\\nho\" a\n echo \"\\\n b\";");
DO_TEST(40, "a\n\\\n b\n", "ec\\\nho a\n echo '\\\n b';");
+ DO_TEST(41, "a\n", "echo a # b");
+ DO_TEST(42, "a\nc\n", "echo a #b\necho c");
+ DO_TEST(43, "a\nc\n", "echo a # b\\\necho c");
+ DO_TEST(44, "a # b\n", "echo a '#' b");
+ DO_TEST(45, "a # b\n", "echo a \\# b");
+ DO_TEST(46, "a\n", "#unbalanced; 'quotes\"\necho a # b");
# undef DO_TEST
newlines between commands, where unquoted backslash-newline pairs are
elided. Within I<COMMAND_STRING>, virsh understands the
same single, double, and backslash escapes as the shell, although you must
-add another layer of shell escaping in creating the single shell argument.
+add another layer of shell escaping in creating the single shell argument,
+and any word starting with unquoted I<#> begins a comment that ends at newline.
If no command is given in the command line, B<virsh> will then start a minimal
interpreter waiting for your commands, and the B<quit> command will then exit
the program.
newlines between commands, where unquoted backslash-newline pairs are
elided. Within I<COMMAND_STRING>, virt-admin understands the
same single, double, and backslash escapes as the shell, although you must
-add another layer of shell escaping in creating the single shell argument.
+add another layer of shell escaping in creating the single shell argument,
+and any word starting with unquoted I<#> begins a comment that ends at newline.
If no command is given in the command line, B<virt-admin> will then start a minimal
interpreter waiting for your commands, and the B<quit> command will then exit
the program.
/*
* vsh.c: common data to be used by clients to exercise the libvirt API
*
- * Copyright (C) 2005, 2007-2015 Red Hat, Inc.
+ * Copyright (C) 2005-2019 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
parser->pos = ++p; /* = \0 or begin of next command */
return VSH_TK_SUBCMD_END;
}
+ if (*p == '#') { /* Argument starting with # is comment to end of line */
+ while (*p && *p != '\n')
+ p++;
+ parser->pos = p + !!*p;
+ return VSH_TK_SUBCMD_END;
+ }
while (*p) {
/* end of token is blank space or ';' */