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
答案也應該對這些其他臨時完成有用。
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
有關這方面的完整概述,您可以在此處訪問所有者文章