我创建一个函数来提供,我使用一个命令可编程完成(与太多的帮助http://www.debian-administration.org/articles/317 )。 shell脚本的用法如下:
script.sh command [command options]
其中命令可以是“富”或“棒”和命令选项为“富”是“a_foo =值”和“b_foo =值”和命令选项关于“酒吧”是“a_bar =值”和“b_bar =值” 。
下面是我使用的配置:
_script() {
local cur command all_commands
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
command="${COMP_WORDS[1]}"
all_commands="foo bar"
case "${command}" in
foo)
COMPREPLY=( $(compgen -W "--a_foo --b_foo" -- ${cur}) ); return 0;;
bar)
COMPREPLY=( $(compgen -W "--a_bar --b_bar" -- ${cur}) ); return 0;;
*) ;;
esac
COMPREPLY=( $(compgen -W "${all_commands}" -- ${cur}) )
return 0
}
complete -F _script script.sh
这主要是工程,我想:
% script.sh f[TAB]
完成对:
% script.sh foo
(具有如所期望的尾随空格)
然而,这样的:
% script.sh foo a[TAB]
完成对:
% script.sh foo a_foo
(还带有一个空格)
我想用一个“=”来代替尾随空格。 另外,我很愿意改变传递给compgen值是“--a_foo = --b_foo =”,在这种情况下,我可能只是删除尾随的空间。
不幸的是,该命令是不是我的控制之下,所以我不能改变的命令行选项来进行格式的“--a_foo价值”,而不是“--a_foo =价值”。