2012-06-12 92 views
3

我無法獲得簡單的bash自動完成功能。我需要從一個預定義的目錄自動完成文件名,所以它看起來就像這樣:帶文件名的bash自動完成

$ cmd log<TAB><TAB> 
file1.log file2.log file3.log 

如果文件是從/var/log/app

回答

-1

將它放到~/.bashrc

_cmd() { COMPREPLY=($(ls /var/log/app)); }  
complete -F _cmd cmd 

要編寫一個全功能的自動完成功能,
請看一看/etc/bash_completion.d/python

+0

'ls'不是必需的,它並不打算以這種方式使用。 '_cmd(){COMPREPLY =(/ var/log/app/*); }' –

+0

它確實顯示/ var/log/app中的文件列表,但是當我輸入一個字母來縮小完成選項,然後選擇TAB時,該字母將被刪除,並且完成返回到原始文件列表。見http://i.imgur.com/9TPMs.gif – jackhab

1

我沒有看到使用ls時,shell可以列出文件本身很好,所以這裏只使用shell。

_cmd() { 
    local files=("/var/log/app/$2"*) 
    [[ -e ${files[0]} ]] && COMPREPLY=("${files[@]##*/}") 
} 
complete -F _cmd cmd