问题
I can't get a simple bash autocompletion function to work. I need to autocomplete file names from a predefined directory so it will look like this:
$ cmd log<TAB><TAB>
file1.log file2.log file3.log
Where files are from /var/log/app
.
回答1:
I don't see the point of using ls
when the shell can list files just fine by itself, so here's one using just the shell.
_cmd() {
local files=("/var/log/app/$2"*)
[[ -e ${files[0]} ]] && COMPREPLY=( "${files[@]##*/}" )
}
complete -F _cmd cmd
回答2:
I found this to work as needed:
COMPREPLY=( $(compgen -W "$(ls /var/log/app/)" -- $cur) )
Thanks to dogbane in https://unix.stackexchange.com/questions/28283/autocomplete-of-filename-in-directory !
回答3:
Put them into ~/.bashrc
_cmd() { COMPREPLY=($(ls /var/log/app)); }
complete -F _cmd cmd
To write a full-featured auto-complete function,
please take a look at /etc/bash_completion.d/python
.
来源:https://stackoverflow.com/questions/10993514/bash-autocompletion-with-file-names