Bash

恢復預設完成

  • February 9, 2013

compgen$COMP_WORD等於1時使用,現在我想在其他情況下恢復預設完成,

現在我有,

_rr()
{
   case $COMP_CWORD in
       1)
           COMPREPLY=($(compgen -W "A B" "${COMP_WORDS[$COMP_CWORD]}"))
           ;;
   esac
}

complete -F _rr rr

現在當$COMP_CWORD不是 1 時,我沒有完成文件/目錄,這是我需要的預設完成。

${COMP_WORDS[$COMP_CWORD - 1]}此外,只有A在這種最小情況下,我才需要啟用完成。

我假設在您的實際情況下,您也想做其他事情,因此繼續使用case構造(儘管在這個最小的情況下,if構造就足夠了):

_rr()
{
   cur="${COMP_WORDS[COMP_CWORD]}"
   prev="${COMP_WORDS[COMP_CWORD - 1]}"

   case "${COMP_CWORD}" in
       1)
           COMPREPLY=($(compgen -W "A B" "${cur}"))
           ;;
   esac

   case "${prev}" in
       A)
           COMPREPLY=($(compgen -f "${cur}"))
           ;;
   esac
}

complete -F _rr rr

-f選項的文件compgen可在Bash 參考手冊中找到(向下滾動到file,在內置-A action描述的小節下)。complete

引用自:https://unix.stackexchange.com/questions/63171