我正在尝试为teamocil定义bash自动完成功能,这样当我输入teamocil <tab>
时,它应该使用文件夹~/.teamocil/
中的文件名而不是文件扩展名。网站上有zsh
的示例:
compctl -g '~/.teamocil/*(:t:r)' teamocil
我如何在bash
中使用它?
编辑:受michael_n的回答影响,我想出了一个单行:
complete -W "$(teamocil --list)" teamocil
答案 0 :(得分:1)
这是我所做的另一个完成脚本的通用版本。它假设一个通用的假设命令“flist”,使用FLIST_DIR定义的某些文件目录来完成命令(省略选项)。
修改程序的以下内容(teamocil
),将默认目录从$HOME/flist
更改为$HOME/.teamocil
),定义自己的过滤器/转换等;然后只需获取它(例如. ~/bin/completion/bash_completion_flist
),可选择将其添加到现有的bash完成列表中。
# bash_completion_flist:
# for some hypothetical command called "flist",
# generate completions using a directory of files
FLIST_DIR=${FLIST_DIR=:-"$HOME/flist"}
_flist_list_files() {
ls $FLIST_DIR | sed 's/\..*//'
}
_flist() {
local cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=()
[[ ${cur} != -* ]] \
&& COMPREPLY=($(compgen -W "$(_flist_list_files)" -- ${cur}))
}
complete -o bashdefault -o default -o nospace -F _flist flist 2>/dev/null \
|| complete -o default -o nospace -F _flist flist
注意:
complete -o ...
)对于不同版本的bash工作有点麻烦。base=${filename%.*}
),但最简单的可以说是简单的sed,对文件名格式有一些假设。答案 1 :(得分:0)
Bash实现了类似的想法,但另一种方式,因此zsh的命令和文件在bash中不起作用。但是你可以为自动完成编写自己的规则。更多信息: