2012-06-12 3 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, когда оболочка может отображать файлы просто отлично сама по себе, поэтому здесь используется только оболочка.

_cmd() { 
    local files=("/var/log/app/$2"*) 
    [[ -e ${files[0]} ]] && COMPREPLY=("${files[@]##*/}") 
} 
complete -F _cmd cmd 
Смежные вопросы