我無法獲得簡單的bash自動完成功能。我需要從一個預定義的目錄自動完成文件名,所以它看起來就像這樣:帶文件名的bash自動完成
$ cmd log<TAB><TAB>
file1.log file2.log file3.log
如果文件是從/var/log/app
。
我無法獲得簡單的bash自動完成功能。我需要從一個預定義的目錄自動完成文件名,所以它看起來就像這樣:帶文件名的bash自動完成
$ cmd log<TAB><TAB>
file1.log file2.log file3.log
如果文件是從/var/log/app
。
我發現需要這個工作:
COMPREPLY=($(compgen -W "$(ls /var/log/app/)" -- $cur))
多虧https://unix.stackexchange.com/questions/28283/autocomplete-of-filename-in-directory羅布麻!
將它放到~/.bashrc
_cmd() { COMPREPLY=($(ls /var/log/app)); }
complete -F _cmd cmd
要編寫一個全功能的自動完成功能,
請看一看/etc/bash_completion.d/python
。
我沒有看到使用ls
時,shell可以列出文件本身很好,所以這裏只使用shell。
_cmd() {
local files=("/var/log/app/$2"*)
[[ -e ${files[0]} ]] && COMPREPLY=("${files[@]##*/}")
}
complete -F _cmd cmd
'ls'不是必需的,它並不打算以這種方式使用。 '_cmd(){COMPREPLY =(/ var/log/app/*); }' –
它確實顯示/ var/log/app中的文件列表,但是當我輸入一個字母來縮小完成選項,然後選擇TAB時,該字母將被刪除,並且完成返回到原始文件列表。見http://i.imgur.com/9TPMs.gif – jackhab