mirror of
https://github.com/spf13/cobra
synced 2025-05-04 12:27:22 +00:00
fish completions: fix double-evaluation of commandline
We capture the commandline tokens using fish's "commandline --tokenize" (-o). Given a commandline of some-cobra-command 'some argument $(123)' "$HOME" into three arguments while removing the quotes some-cobra-command some argument $(123) $HOME Later we pass "some argument $(123)" without quotes to the shell's "eval". This is wrong and causes spurious evaluation of the parenthesis as command substitution. Fix this by escaping the arguments. To avoid regressing the expansions that did work (variable expansion), only do this if we have "commandline -x" (part of fish 4) which expands tokens. Reproduce the issue by pasting the completion script at https://github.com/fish-shell/fish-shell/issues/10194#issuecomment-1879563545 to a file "grafana-manager.fish" and running function grafana-manager; end source grafana-manager.fish Then type (without pressing Enter) grafana-manager public-dashboards delete --organization-id 3 --dashboard-name "k8s (public)" <TAB> Fixes https://github.com/fish-shell/fish-shell/issues/10194
This commit is contained in:
parent
5a1acea321
commit
0e2602dea1
1 changed files with 7 additions and 1 deletions
|
@ -45,7 +45,13 @@ function __%[1]s_perform_completion
|
|||
__%[1]s_debug "Starting __%[1]s_perform_completion"
|
||||
|
||||
# Extract all args except the last one
|
||||
set -l args (commandline -opc)
|
||||
set -l args (
|
||||
if commandline -x >/dev/null 2>&1
|
||||
commandline -xpc | string escape
|
||||
else
|
||||
commandline -opc
|
||||
end
|
||||
)
|
||||
# Extract the last arg and escape it in case it is a space
|
||||
set -l lastArg (string escape -- (commandline -ct))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue