2016-09-04 2 views
4

내 파일 시스템 용 bash_completion 스크립트를 작성하고 싶습니다. 일부 DB에 쿼리를 보내는 클라이언트 프로그램이 있습니다.Bash의 사용자 지정 경로 완성

예 :

my_prog --ls db_name:/foo/bar/ 

이 명령은 db_name:/foo/bar 폴더에있는 파일의 표준 출력 목록에 기록합니다.

자동 완성 기능을 사용하고 싶습니다. 그래서 탭을 누르면 옵션 목록이 표시됩니다. 내가 탭을 누르고는 현재 입력 된 경로를 대체 하나의 옵션이, 그래서 때

my_prog --ls db_name:/foo/bar/<tab> 

하지만

이 경우에 나는이 받고 있어요 :

$ my_prog --ls db_name:/foo/bar/<tab> 
$ my_prog --ls file 

을하지만 경기가 추가 될하려면 입력 된 경로의 끝. 비슷한하는 동안

__complete_path() 
{ 
    COMPREPLY=() 

    if [[ ${1} == "" ]] 
    then 
     COMPREPLY=("/") 
     compopt -o nospace 
     return 
    fi 

    base=${1##*/} 
    dir=${1%/*} 

    options="my_prog --ls ${db}:${dir}" 
    COMPREPLY=($(compgen -W "${options}" -- ${base})) 

    compopt -o nospace 
} 
+0

무엇이'$ {db} '입니까 ?? –

답변

1

나는이 스레드를 발견

여기 내 완성 기능입니다. This stackexchange post는 자동 완성 기능을 함께 사용하는 데 도움이되었습니다. 전체 경로가 표시되기 때문에 "일반적인"자동 완성과는 다르지만 그렇지 않은 경우 유용 할 수 있습니다.

_complete_func() 
    local cur prev opts 
    COMPREPLY=() 
    cur="${COMP_WORDS[COMP_CWORD]}" 
    prev="${COMP_WORDS[COMP_CWORD-1]}" 

    if [ $COMP_CWORD -eq 1 ]; then 
    opts="some options for the program" 
     COMPREPLY=($(compgen -W "${opts}" -- ${cur})) 
    elif [ $COMP_CWORD -ge 2 ]; then 
    local files=("${cur}"*) 
     COMPREPLY=("${files[@]}") 
fi 
} 
complete -o nospace -F complete_func command_to_autocomplete 
관련 문제