我想写自己的自动完成功能。但参数应该是可以访问的,而不是面对破折号
这是我目前的工作示例
# /etc/bash_completion.d/radio
_radio()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--foo --bar --baz"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _radio radio
我需要更改哪些内容没有破折号?
答案 0 :(得分:0)
如果我理解正确,你希望你的命令能像:
$ radio <tab><tab>
bar baz foo
如果是这样,只需摆脱破折号。
以下是您修改过的脚本,认为它应该有效:
# /etc/bash_completion.d/radio
_radio()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="foo bar baz"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -F _radio radio
答案 1 :(得分:0)
@Vivek基本上是正确的,但是如果您完全删除if
,则可以永久完成标签上的操作:
$ radio bar foo baz<tab>
bar baz foo
相反,您应该更改 if
以仅查找第二个单词:
_radio()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="foo bar baz"
# only tab complete second word in command string
if [[ ${#COMP_WORDS[@]} == 2 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _radio radio