2015-02-10 71 views
0

我試過this other questions's accepted answer但它不適用於我。所以請不要重複投票。開關後的Bash文件名自動完成/參數

我的腳本被命名爲「追蹤器」,它接受下列開關:--dummy --audit_sessiones --user_count --detailed_user_count --parfile

--parfile switcj應遵循的文件名。

我有這個自動完成腳本:

_tracker() 
{ 
    local cur prev opts 
    COMPREPLY=() 
    cur="${COMP_WORDS[COMP_CWORD]}" 
    prev="${COMP_WORDS[COMP_CWORD-1]}" 
    opts="--dummy --audit_sessiones --user_count --detailed_user_count --parfile" 

    if [[ ${cur} == -* ]] ; then 
     COMPREPLY=($(compgen -W "${opts}" -- ${cur})) 
     return 0 
    fi 

    opts="ls *" 
    if [[ ${prev} == --parfile ]]; then 
     COMPREPLY=("${files[@]##*/}") 
     return 0 
    fi 
} 
complete -F _tracker tracker 

開關自動完成正常工作。

但我也希望用戶能夠在參數--parfile後面使用文件名自動完成,但我無法使其工作。

回答

1

complete發現有-o default選項,這樣你可以刪除opts="ls *"; if ... fi部分,只是做complete -F _tracker -o default tracker

據bash的手冊:

如果-o default選項被提供給complete時被定義 的compspec,readline的默認的建成將 來,如果compspec(如果嘗試,默認 的bash執行完成)不生成匹配。