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 の特定のケースでは、ホストの SSH 構成ファイルと一致するように grep できることがわかります。ただし、次のような他の完了状況が発生します。

$ git che<tab>
checkout      cherry        cherry-pick

答えは、これらの他の一時的な完了にも役立ちます。

答え1

キャンプゲン以下のように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

このコンテンツの完全な概要については、所有者の投稿をご覧ください。ここ

関連情報