我无法获得简单的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