use Getopt::Long;
use Data::Dumper;
use XML::Writer;
+use String::ShellQuote qw(shell_quote);
use Locale::TextDomain 'libguestfs';
# Optional:
pod2usage (__"virt-inspector: no image or VM names given") if @ARGV == 0;
my $rw = 0;
+
+# XXX This is a bug: Originally we intended to open the guest with
+# rw=>1 in order to tell Sys::Guestfs::Lib that we should disallow
+# active domains. However this also has the effect of opening the
+# disk image in write mode, and in any case we don't use this option
+# in guestfish any more since we moved all the inspection code into
+# the core library. We should drop the fish output modes completely.
$rw = 1 if $output eq "fish";
+
my $g;
my @images;
if ($uri) {
print "--ro ";
}
- print "-a $_ " foreach @images;
+ foreach (@images) {
+ printf "-a %s ", shell_quote ($_);
+ }
my $mounts = $oses->{$root_dev}->{mounts};
# Have to mount / first. Luckily '/' is early in the ASCII
# character set, so this should be OK.
foreach (sort keys %$mounts) {
- print "-m $mounts->{$_}:$_ " if $_ ne "swap" && $_ ne "none";
+ if ($_ ne "swap" && $_ ne "none") {
+ printf "-m %s ", shell_quote ("$mounts->{$_}:$_");
+ }
}
print "\n"
}
# YAML output
elsif ($output eq "yaml") {
- die __"virt-inspector: no YAML support\n"
+ die __"virt-inspector: no YAML support, try installing perl-YAML or libyaml-perl\n"
unless exists $INC{"YAML/Any.pm"};
print Dump(%$oses);
=back
+=head1 SHELL QUOTING
+
+Libvirt guest names can contain arbitrary characters, some of which
+have meaning to the shell such as C<#> and space. You may need to
+quote or escape these characters on the command line. See the shell
+manual page L<sh(1)> for details.
+
=head1 SEE ALSO
L<guestfs(3)>,