Bash

遍歷 bash 完成的所有值

  • December 18, 2020

考慮:

$ 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

答案也應該對這些其他臨時完成有用。

compgen只能使用一個單詞,如下所示:

compgen -c git 

這是您的案例的自定義解決方案:

您必須首先獲取 bash-completion 腳本,然後設置COMP_ * vars 以使其滿足此案例,然後使用本機bash_completion函式xfunc以程式方式觸發完成,然後將結果收集在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

有關這方面的完整概述,您可以在此處訪問所有者文章

引用自:https://unix.stackexchange.com/questions/625022