jackhab
jackhab

Reputation: 17718

bash autocompletion with file names

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.

Upvotes: 4

Views: 2917

Answers (3)

geirha
geirha

Reputation: 6181

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

Upvotes: 3

jackhab
jackhab

Reputation: 17718

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 !

Upvotes: -1

kev
kev

Reputation: 161974

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.

Upvotes: -1

Related Questions