2013-07-26 12 views
8

내 자신의 명령 세트에 대해 자동 완성 또는 탭 완성 기능을 개발하려고합니다.중첩 된 다중 레벨 부속 명령은 어떻게 자동 완성합니까?

예를 들어, foo는 내 진 가정 :

CLI>> foo [TAB] [TAB] 

그것은 주요 명령 configureshow을 표시해야합니다. - 어떻게 두 번째를 얻을 수

CLI>> foo [TAB] [TAB] 
DSP NPU CM` 

난 단지 어떻게 첫번째 수준에 탭 완성 및 디스플레이 알고 : 나는 configure을 선택하면

그런 다음, 하위 명령 CM, DSPNPU를 표시해야합니다 수준도?

/etc/completion.d에 입력 해 드리겠습니다.

내 코드 :

_foo() 
{ 
    local cur prev opts 
    COMPREPLY=() 
    cur="${COMP_WORDS[COMP_CWORD]}" 
    prev="${COMP_WORDS[COMP_CWORD-1]}" 
    words=("${COMP_WORDS[@]}") 
    cword=$COMP_CWORD 
    opts="configure show" 
} 

내가 CMDSPNPUconfigure에서 하위 명령을 추가하는 방법으로 붙어있어.

_foo() 
{ 
    local cur prev 

    cur=${COMP_WORDS[COMP_CWORD]} 
    prev=${COMP_WORDS[COMP_CWORD-1]} 

    case ${COMP_CWORD} in 
     1) 
      COMPREPLY=($(compgen -W "configure show" -- ${cur})) 
      ;; 
     2) 
      case ${prev} in 
       configure) 
        COMPREPLY=($(compgen -W "CM DSP NPU" -- ${cur})) 
        ;; 
       show) 
        COMPREPLY=($(compgen -W "some other args" -- ${cur})) 
        ;; 
      esac 
      ;; 
     *) 
      COMPREPLY=() 
      ;; 
    esac 
} 

complete -F _foo foo 
: - (그들은 당신의 사건에 관련하지 않으면 당신은 단지 그 세 줄을 삭제할 수 있습니다 어떻게하는지 보여 show의 하위 명령에 대한 섹션으로) 여기

답변

15

은 2 단계의 경우에 대한 예제 스크립트입니다

이 예제에서 3 레벨 명령 등으로 확장하는 방법을 알기를 바랍니다.

+0

내가 원했던 바로 그 것이다. 내가 나아가 자마자 너에게 돌아 오지. – Puneeth

+0

재미 있고, 얼마나 멋진 것들이 여기 주위에서 찾을 수 있습니다 ;-) – GhostCat