相关疑难解决方法(0)

多级Bash完成

我目前有一个Bash完成文件,它从一个允许的脚本命令列表(称为"pbt")中完成一个参数.这是工作Bash完成文件:

_pbt_complete()
{
  local cur goals

  COMPREPLY=()
  cur=${COMP_WORDS[COMP_CWORD]}
  goals='asadmin clean deploy'
  cur=`echo $cur`
  COMPREPLY=($(compgen -W "${goals}" ${cur}))
}

complete -F _pbt_complete pbt
Run Code Online (Sandbox Code Playgroud)

所以,如果我打电话

pbt <tab>
Run Code Online (Sandbox Code Playgroud)

Bash完成所有允许的命令(asadmin,clean,deploy),这没关系.

现在我想在完成时添加"第二"级别.所以例如,如果我输入

pbt asadmin <tab>
Run Code Online (Sandbox Code Playgroud)

它应该完成所有只在asadmin-"环境"中可用的选项(我也将在bash完成文件中定义),例如,pbt asadmin [start-domain|stop-domain]但是如果我输入

pbt deploy <tab>
Run Code Online (Sandbox Code Playgroud)

例如,它应该完成另一组选项pbt deploy [all|current].因此第二个命令的选项应始终取决于第一个命令.我怎么能在完成文件中这样做?

bash bash-completion

17
推荐指数
1
解决办法
4476
查看次数

如何自动完成别名为单个命令的多级命令?

假设我有两个bash函数:

dock() { sudo docker $@ ;}
Run Code Online (Sandbox Code Playgroud)

dock-ip() { sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $@ ;}
Run Code Online (Sandbox Code Playgroud)

如何使用第二个函数进行 bash自动完成?

使用第一个,就像添加一样简单:

_completion_loader docker; complete -F _docker dock
Run Code Online (Sandbox Code Playgroud)

这不适用于第二个.Docker的自动完成源位于/usr/share/bash-completion/completions/dockerDebian Stretch上.我有更多的函数,如dock-run,dock-exec等等,所以我不想为每个函数编写自定义完成函数.

另外,complete -F _docker_container_inspect dock-ip只是部分工作; tab仅列出容器,而不是完成部分字符串.


研究:

如何自动完成嵌套的多级子命令?< - 需要自定义功能

https://superuser.com/questions/436314/how-can-i-get-bash-to-perform-tab-completion-for-my-aliases < - 仅对顶级命令自动执行

bash alias autocomplete docker

5
推荐指数
1
解决办法
484
查看次数

标签 统计

bash ×2

alias ×1

autocomplete ×1

bash-completion ×1

docker ×1