【发布时间】:2012-06-15 03:35:29
【问题描述】:
我无法使用简单的 bash 自动完成功能。我需要从预定义的目录中自动完成文件名,所以它看起来像这样:
$ cmd log<TAB><TAB>
file1.log file2.log file3.log
文件来自/var/log/app。
【问题讨论】:
标签: bash autocomplete bash-completion
我无法使用简单的 bash 自动完成功能。我需要从预定义的目录中自动完成文件名,所以它看起来像这样:
$ cmd log<TAB><TAB>
file1.log file2.log file3.log
文件来自/var/log/app。
【问题讨论】:
标签: bash autocomplete bash-completion
当 shell 可以单独列出文件时,我看不出使用 ls 的意义,所以这里只使用 shell。
_cmd() {
local files=("/var/log/app/$2"*)
[[ -e ${files[0]} ]] && COMPREPLY=( "${files[@]##*/}" )
}
complete -F _cmd cmd
【讨论】:
我发现这可以根据需要工作:
COMPREPLY=( $(compgen -W "$(ls /var/log/app/)" -- $cur) )
感谢 https://unix.stackexchange.com/questions/28283/autocomplete-of-filename-in-directory 中的 dogbane!
【讨论】:
$cur的问题。
将它们放入~/.bashrc
_cmd() { COMPREPLY=($(ls /var/log/app)); }
complete -F _cmd cmd
要编写一个功能齐全的自动完成功能,
请看/etc/bash_completion.d/python。
【讨论】:
ls 不是必需的,也不打算以这种方式使用。 _cmd() { COMPREPLY=(/var/log/app/*); }