使用多个单词进行 Bash 补全

使用多个单词进行 Bash 补全

我的命令是

thermostat.sh override off

我可以override完成,但不能完成后续off

这是我的脚本

#/usr/bin/env bash
_thermostat-completions() {
        if [ "${#COMP_WORDS[@]}" = "2" ]; then
                COMPREPLY=($(compgen -W "off program hold override" "${COMP_WORDS[1]}"))
                return
        elif [ "${#COMP_WORDS[@]}" = "3" ]; then
                if [ "${COMP_WORDS[2]}" = "override" ]; then
                        # This was a guess; it doesn't work.
                        COMPREPLY=($(compgen -W "off holiday" "${COMP_WORDS[1]} ${COMP_WORDS[2]}"))
                        return
                fi
        fi
}

complete -F _thermostat-completions thermostat.sh

可以完成第三个单词吗?我不知道该怎么做。

答案1

由于某种原因${COMP_WORDS[2]}不起作用,但你可以通过以下方式解决这个问题

prev="${COMP_WORDS[COMP_CWORD-1]}"
if [ "$prev" = "override" ]; then

那么: 有什么问题${COMP_WORDS[2]}

似乎不需要12这两者都有效。

#prev="${COMP_WORDS[COMP_CWORD-1]}"
prev="${COMP_WORDS[1]}"

相关内容