2015-01-29 8 views
0

가 여기에 test.sh은 2 수준 배쉬 탭 자동 완성 기능을 구현하고 나는 그것을 추가하려면이하여 자동 완성 기능 을 가지고하려는 :어떻게

.bashrs에
complete -W "1level 2level" test.sh 

I test.sh 1을 입력하고 [Tab] 키를 누르면 자동으로 1 레벨을 채울 수 있습니다. 그러나 지금 나는 그것이 나 자동차와 같은 다른 열 완료하는 데 도움이 원하는 '

complete -W "secOption1 secOption2" test.sh 1level 
complete -W "secOption1 secOption2" test.sh 2level 

하지만했다 : 나는 두 번째와 세 번째와 N 번째 열을 사용자 정의 할 수 있기를 바랍니다

test.sh 1level sec[TAB] 

을, 나는이 시도했다 t 작업

답변

1

당신은 당신의 자신의 자동 완성 기능을 쓸 수 있습니다. 예를 들어 : 자세한 내용은

[STEP 100] $ echo $BASH_VERSION 
4.3.30(1)-release 
[STEP 101] $ cat compspec 
function _compgen_foo 
{ 
    local cmd=$1 cur=$2 pre=$3 

    if [[ $pre == "$cmd" ]]; then 
     COMPREPLY=($(compgen -W "pos1a-example pos1b-example" -- "$cur")) 
     return 
    fi 

    if [[ $pre == pos1* ]]; then 
     COMPREPLY=($(compgen -W "pos2a-example pos2b-example" -- "$cur")) 
     return 
    fi 
} 

complete -F _compgen_foo foo 
[STEP 102] $ source ./compspec 
[STEP 103] $ foo <TAB> 
[STEP 103] $ foo pos1 
[STEP 103] $ foo pos1<TAB><TAB> 
pos1a-example pos1b-example 
[STEP 103] $ foo pos1a<TAB> 
[STEP 103] $ foo pos1a-example␣ 
[STEP 103] $ foo pos1a-example <TAB> 
[STEP 103] $ foo pos1a-example pos2 
[STEP 103] $ foo pos1a-example pos2<TAB><TAB> 
pos2a-example pos2b-example 
[STEP 103] $ foo pos1a-example pos2 
[STEP 103] $ foo pos1a-example pos2b<TAB> 
[STEP 103] $ foo pos1a-example pos2b-example␣ 
[STEP 103] $ foo pos1a-example pos2b-example <CR> 
bash: foo: command not found 
[STEP 104] $ 

배쉬 설명서의 Programmable Completion를 참조하십시오.

+0

당신은 explan 개 pls 수 - "$의 CUR"수단을? 나는 수동 –

+0

@JasonYang에서 그것을 찾을 수 없습니다 : 당신은 페이지 [프로그램 완료] (http://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html#에서 정보를 찾을 수 있습니다 프로그래밍 가능 - 완료). 오래 걸리지 않습니다. – pynexj

+0

좋습니다! 왜 이것이 작동하지 않는지 설명해 주시겠습니까? if [$ pre == * server]]; COMPREPLY = ($ (comp -W "\ 'grep"- "$ cur")) return fi [[$ pre == * rep]] 인 경우; 다음 COMPREPLY은 = ($ (compgen -W "AAA BBB"- "$의 CUR")) 반환 과학 $ 사전 == * 담당자는 true를 반환하지 않습니다. 하지만 내 명령은 'grep'테스트와 같습니다. –