【发布时间】:2016-04-19 22:20:42
【问题描述】:
在我的项目中,我在$PROJECTROOT/bin/ 中有所有可执行文件。主可执行文件$PROJECTROOT/bin/run 可以加载带有参数-p 的插件,例如./bin/run -p plugin1。所有插件都在$PROJECTROOT/plugins/。我想为$PROJECTROOT/plugins/ 中的所有插件添加自动完成功能。因此,我需要访问与bin/run 中的二进制文件相关的plugins 目录,因为我想从任何地方运行可执行文件,例如我可能想运行~/myproject/bin/run -p plugin1,它应该检查~/myprojects/plugins 以获取可用插件的列表。
如果我的可执行文件路径为$EXEC,我可以使用$(dirname $EXEC)/../plugins 访问插件目录。我尝试了EXEC=$0,但这不起作用,因为$0 没有引用我想要自动完成的可执行文件。有没有办法在bash的自动补全功能中获取可执行文件的路径?
我的自动完成文件如下所示:
_run()
{
local cur prev opts base
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="-d -p"
case "${prev}" in
-p)
local available_plugins=$(ls $(dirname $0)/../plugins)
# ^^^ this doesn't work
COMPREPLY=( $(compgen -W "${available_plugins}" -- ${cur}) )
return 0
;;
*)
;;
esac
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
}
complete -F _run run
【问题讨论】:
-
${COMP_WORDS[0]}中的命令不是吗? -
@EtanReisner,你是对的!谢谢 - 如果您将此添加为答案,我会接受。
标签: bash autocomplete