迭代 bash 完成的所有值

迭代 bash 完成的所有值

考虑:

$ ssh fo<tab>
foo  fool  football

我将如何编写 for 循环来迭代这些值?

#!/usr/bin/env bash
for SERVER in $(ssh fo<MAGIC HERE>) ; do echo $SERVER ; done

该列表可能会定期更改,因此不能选择对值进行硬编码。在 SSH 的特定情况下,我知道我可以 grep 匹配主机的 SSH 配置文件。但还会出现其他一些完成情况,例如:

$ git che<tab>
checkout      cherry        cherry-pick

答案对于这些其他临时完成也应该有用。

答案1

康普根只能使用一个单词,如下所示:

compgen -c git 

这是适合您的案例的定制解决方案:

您必须首先获取 bash-completion 脚本,然后设置比较_bash_completion* vars,以便它们满足此用例,然后以编程方式触发本机函数的完成函数然后结果将被收集在COMPREPLY数组中(示例取自这里):

# load bash-completion helper functions
source /usr/share/bash-completion/bash_completion

# array of words in command line
COMP_WORDS=(git c)

# index of the word containing cursor position
COMP_CWORD=1

# command line
COMP_LINE='git c'

# index of cursor position
COMP_POINT=${#COMP_LINE}

# execute completion function
_xfunc git _git

# print completions to stdout
printf '%s\n' "${COMPREPLY[@]}"

PS:要了解命令完成期间调用的确切函数:使用complete -p <command>

输出 :

checkout
cherry
cherry-pick
clean
clone
column
commit
config
credential

有关此内容的完整概述,您可以访问所有者帖子这里

相关内容