]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/CLIHandler.pm
cli: filter out aliases when trying to expand command
[pve-common.git] / src / PVE / CLIHandler.pm
index 316d29d72108574d3df137f4c7faaa277fd99260..49a459ba26299877c3d2abcd53feb0085c50eb65 100644 (file)
@@ -54,7 +54,9 @@ my $expand_command_name = sub {
 
     return $cmd if exists $def->{$cmd}; # command is already complete
 
-    my @expanded = grep { /^\Q$cmd\E/ } keys %$def;
+    my $is_alias = sub { ref($_[0]) eq 'HASH' && $_[0]->{alias} };
+    my @expanded = grep { /^\Q$cmd\E/ && !$is_alias->($def->{$_}) } keys %$def;
+
     return $expanded[0] if scalar(@expanded) == 1; # enforce exact match
 
     return undef;
@@ -93,8 +95,8 @@ sub resolve_cmd {
                $cmd = $argv->[$i]; 
            }
            $cmdstr .= " $cmd";
-           last if !defined($def->{$cmd});
            $def = $def->{$cmd};
+           last if !defined($def);
 
            if (ref($def) eq 'ARRAY') {
                # could expand to a real command, rest of $argv are its arguments
@@ -132,6 +134,7 @@ sub generate_usage_str {
        $cli_handler_class->can('string_param_file_mapping');
 
     my ($subcmd, $def, undef, undef, $cmdstr) = resolve_cmd($cmd);
+    $abort->("unknown command '$cmdstr'") if !defined($def) && ref($cmd) eq 'ARRAY';
 
     my $generate;
     $generate = sub {