linux下コマンド自動補完総括
5761 ワード
多くのコマンドはbash-completeのスクリプトを提供しています.このコマンドを実行すると、tabをたたくとパラメータが自動的に補完され、生産性が大幅に向上します.
linuxコマンド自動補完
centos 7でyum install bash-completionを実行した後、システムを正常に再起動します.
dockerコマンド自動補完
yum install dockerの後に、/usr/share/bash-completion/completions/dockerというファイルがあります.スクリプトはbash自動補完に使用されるのは明らかですが、直接sourceがスクリプトを実行するとdockerコマンドがtabを叩くとエラーが発生します.
kubectlコマンド自動補完
kubectlというコマンドラインツールは非常に重要で、それに関連するコマンドも多く、私たちもそんなに多くのコマンドを覚えられず、しかもよく書き間違えてしまうので、コマンド自動補完は非常に必要で、kubectlコマンドラインツール自体はcomplicationをサポートしており、簡単な設定で済む.以下はlinuxシステムの設定コマンドです.
python shell自動コマンド補完ファイル . .環境変数 を更新する.
shellコマンド補完
shellコマンドラインでは、「Tab」キーを使用してコマンドまたはファイル名を自動的に補完できます.この機能は、shellスクリプトで実装できます.これにより、「Tab」キーを使用してカスタムshell関数を自動的に補完できます.関連コマンドは3つあります.compgen、complete、compoptです.
1、compgen
compgenコマンドは、optionに基づいてwordと一致する可能性のある補完を生成し、標準出力に印刷します.これらのオプションは、組み込みコマンドcompleteでサポートされている任意のオプションですが、「-p」と「-r」ではありません.「-F」または「-C」を使用すると、プログラム可能な補完機能で設定された各shell変数は使用できますが、値はあまり役に立ちません.補完エントリは同じ方法で生成され、プログラマブル補完コードが同じ補完オプションで直接補完エントリを生成したように、wordを指定すると一致するエントリのみが表示されます.
2、complete
completeコマンドは、各名前を補完する方法を指定します.オプション「-p」が指定されているか、オプションが指定されていない場合は、既存の補完方法を入力として再印刷できるフォーマットで印刷します.オプション「-r」は、指定した名前の補完メソッドを削除し、名前を指定しない場合はすべての名前の補完メソッドを削除します.オプション「-D」は、その後のオプションや動作がデフォルトコマンド補完に適用されることを意味し、すなわち、これまで定義されていなかった補完コマンドも補完できる.オプション「-E」は、その後のオプションと動作が空のコマンド補完に適用されることを意味し、すなわち空白行を補完する.オプション「-G」、「-W」、「-X」、「-P」および「-S」については、補完開始前に拡張されないようにカッコで保護する必要があります.
「-o bashdefault」:補完エントリが生成されない場合は、bashデフォルトの他の補完を使用します.「-o default」:補完エントリが生成されない場合は、readlineのデフォルトのファイル名補完を使用します.「-o dirnames」:補完エントリが生成されない場合は、ディレクトリ名補完を行います.「-o filenames」:readlineにファイル名を生成して、shell関数に使用する目的でディレクトリ名の後にスラッシュを付けたり、特殊な文字を参照したりして、行末のスペースを削除するように伝えます.「-o noquote」:「readline」はファイル名を参照しないことを伝え、デフォルトでは参照されます.「-o nospace」:「readline」は、補完された名前の後にスペースを追加せず、デフォルトでスペースを追加することを示します.「-o plusdirs」:補完エントリを生成した後、ディレクトリ名補完を行い、他のアクションで得られた結果に結果を追加します.「-A alias」:別名、同じオプション「-a」.「-A arrayvar」:配列変数名.「-A binding」:「readline」キーバインド名.「-A builtin」:shell内蔵コマンド名、同じオプション「-b」.「-A command」:コマンド名、同じオプション「-c」.「-A directory」:ディレクトリ名、同じオプション「-d」.「-A disabled」:使用できないshell組み込みコマンド名.「-A enabled」:使用可能なshell組み込みコマンド名.「-A export」:エクスポートされたshell変数名、同じオプション「-e」.「-A file」:ファイル名、同じオプション「-f」.「-A function」:shell関数名.「-Aグループ」:グループ名、同じオプション「-g」.「-A helptopic」:組み込みコマンドhelpがサポートするヘルプトピック.「-A hostname」:ホスト名、shell環境変数HOSTFILEから取得します.「-A job」:ジョブ名、同オプション「-j」.「-A keyword」:shell予約語、同オプション「-k」.「-A running」:実行中のジョブ名.「-Aサービス」:サービス名、同じオプション「-s」.「-A setopt」:組み込みコマンドsetのオプション「-o」で使用可能なパラメータ.「-A shopt」:組み込みコマンドshoptで許容できるオプション名.「-A signal」:信号名.「-A stopped」:一時停止したジョブ名.「-A user」:ユーザー名、同じオプション「-u」.「-A variable」:すべてのshell変数名、同じオプション「-v」.「-C command」:サブshellでコマンドを実行し、その結果を補完エントリとします.「-F function」:現在のshell環境で関数functionを実行し、実行時、パラメータ
3、compopt
compoptコマンドは、各名前で指定した補完オプションを変更し、名前が指定されていない場合は現在実行されている補完オプションを変更し、オプションも指定されていない場合は、各名前または現在の補完に使用するオプションを表示します.オプションの可能な値は、上記の組み込みコマンドcompleteの有効なオプションです.
4、相関変数
コマンドcompgen、complete、compoptのほか、shellコマンドラインの自動補完には、以下のようなshell固有の変数が使用されます.
COMP_CWORD:現在のカーソル位置を含む単語
5、例
テストスクリプトは次のとおりです.
例ではshellコマンドラインでコマンドautotabを実行する場合、コマンドが入力されていない場合、Tabキーを押すとこのコマンドが補完され、コマンドcompleteおよび関数_を介していくつかのパラメータが表示または補完されます.Autotab完了、配列autotab_Listの各要素はコマンドのパラメータに拡張されます.
linuxコマンド自動補完
centos 7でyum install bash-completionを実行した後、システムを正常に再起動します.
dockerコマンド自動補完
yum install dockerの後に、/usr/share/bash-completion/completions/dockerというファイルがあります.スクリプトはbash自動補完に使用されるのは明らかですが、直接sourceがスクリプトを実行するとdockerコマンドがtabを叩くとエラーが発生します.
yum install -y bash-completion 。
kubectlコマンド自動補完
kubectlというコマンドラインツールは非常に重要で、それに関連するコマンドも多く、私たちもそんなに多くのコマンドを覚えられず、しかもよく書き間違えてしまうので、コマンド自動補完は非常に必要で、kubectlコマンドラインツール自体はcomplicationをサポートしており、簡単な設定で済む.以下はlinuxシステムの設定コマンドです.
source > ~/.bashrc
python shell自動コマンド補完
.pythonrc
を作成し、以下の内容を追加するimport rlcompleter, readline
readline.parse_and_bind('tab:complete')
.bashrc
の文末に以下の内容を追加する export PYTHONSTARTUP=~/.pythonrc
source ./.bashrc
shellコマンド補完
shellコマンドラインでは、「Tab」キーを使用してコマンドまたはファイル名を自動的に補完できます.この機能は、shellスクリプトで実装できます.これにより、「Tab」キーを使用してカスタムshell関数を自動的に補完できます.関連コマンドは3つあります.compgen、complete、compoptです.
1、compgen
compgen [option] [word]
compgenコマンドは、optionに基づいてwordと一致する可能性のある補完を生成し、標準出力に印刷します.これらのオプションは、組み込みコマンドcompleteでサポートされている任意のオプションですが、「-p」と「-r」ではありません.「-F」または「-C」を使用すると、プログラム可能な補完機能で設定された各shell変数は使用できますが、値はあまり役に立ちません.補完エントリは同じ方法で生成され、プログラマブル補完コードが同じ補完オプションで直接補完エントリを生成したように、wordを指定すると一致するエントリのみが表示されます.
2、complete
complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DE] [name ...]
completeコマンドは、各名前を補完する方法を指定します.オプション「-p」が指定されているか、オプションが指定されていない場合は、既存の補完方法を入力として再印刷できるフォーマットで印刷します.オプション「-r」は、指定した名前の補完メソッドを削除し、名前を指定しない場合はすべての名前の補完メソッドを削除します.オプション「-D」は、その後のオプションや動作がデフォルトコマンド補完に適用されることを意味し、すなわち、これまで定義されていなかった補完コマンドも補完できる.オプション「-E」は、その後のオプションと動作が空のコマンド補完に適用されることを意味し、すなわち空白行を補完する.オプション「-G」、「-W」、「-X」、「-P」および「-S」については、補完開始前に拡張されないようにカッコで保護する必要があります.
「-o bashdefault」:補完エントリが生成されない場合は、bashデフォルトの他の補完を使用します.「-o default」:補完エントリが生成されない場合は、readlineのデフォルトのファイル名補完を使用します.「-o dirnames」:補完エントリが生成されない場合は、ディレクトリ名補完を行います.「-o filenames」:readlineにファイル名を生成して、shell関数に使用する目的でディレクトリ名の後にスラッシュを付けたり、特殊な文字を参照したりして、行末のスペースを削除するように伝えます.「-o noquote」:「readline」はファイル名を参照しないことを伝え、デフォルトでは参照されます.「-o nospace」:「readline」は、補完された名前の後にスペースを追加せず、デフォルトでスペースを追加することを示します.「-o plusdirs」:補完エントリを生成した後、ディレクトリ名補完を行い、他のアクションで得られた結果に結果を追加します.「-A alias」:別名、同じオプション「-a」.「-A arrayvar」:配列変数名.「-A binding」:「readline」キーバインド名.「-A builtin」:shell内蔵コマンド名、同じオプション「-b」.「-A command」:コマンド名、同じオプション「-c」.「-A directory」:ディレクトリ名、同じオプション「-d」.「-A disabled」:使用できないshell組み込みコマンド名.「-A enabled」:使用可能なshell組み込みコマンド名.「-A export」:エクスポートされたshell変数名、同じオプション「-e」.「-A file」:ファイル名、同じオプション「-f」.「-A function」:shell関数名.「-Aグループ」:グループ名、同じオプション「-g」.「-A helptopic」:組み込みコマンドhelpがサポートするヘルプトピック.「-A hostname」:ホスト名、shell環境変数HOSTFILEから取得します.「-A job」:ジョブ名、同オプション「-j」.「-A keyword」:shell予約語、同オプション「-k」.「-A running」:実行中のジョブ名.「-Aサービス」:サービス名、同じオプション「-s」.「-A setopt」:組み込みコマンドsetのオプション「-o」で使用可能なパラメータ.「-A shopt」:組み込みコマンドshoptで許容できるオプション名.「-A signal」:信号名.「-A stopped」:一時停止したジョブ名.「-A user」:ユーザー名、同じオプション「-u」.「-A variable」:すべてのshell変数名、同じオプション「-v」.「-C command」:サブshellでコマンドを実行し、その結果を補完エントリとします.「-F function」:現在のshell環境で関数functionを実行し、実行時、パラメータ
“$1”
はそのパラメータが補完されているコマンド名を表し、パラメータ“$2”
は補完されている名前を表し、パラメータ“$3”
は補完されている名前の前の単語を表し、実行終了時に配列変数COMPREPLYから補完エントリを取得することを表す.「-G globpat」:ファイル名拡張モードglobpatを使用して拡張し、可能な補完エントリを生成します.「-P prefix」:すべてのオプションが補完結果に適用された後、結果の前にプレフィックスprefixを追加します.「-S suffix」:すべてのオプションが補完結果に適用された後、結果の後に接尾辞suffixを追加します.「-W wordlist」:特殊変数IFSの文字を使用して単語リストwordlistを分割し、分割後の各単語を拡張します.結果として、補完する単語と一致するエントリが補完エントリです.「-X filterpat」:filterpatは、ファイル名の拡張に使用されるモードで、前のオプションとパラメータで生成された補完リストに作用し、フィルタモードに一致する各エントリを削除します.モードの先頭の感嘆符は否定を表し、フィルタモードに一致しないエントリが削除されます.3、compopt
compopt [-o option] [-DE] [+o option] [name]
compoptコマンドは、各名前で指定した補完オプションを変更し、名前が指定されていない場合は現在実行されている補完オプションを変更し、オプションも指定されていない場合は、各名前または現在の補完に使用するオプションを表示します.オプションの可能な値は、上記の組み込みコマンドcompleteの有効なオプションです.
4、相関変数
コマンドcompgen、complete、compoptのほか、shellコマンドラインの自動補完には、以下のようなshell固有の変数が使用されます.
COMP_CWORD:現在のカーソル位置を含む単語
“${COMP_WORDS}”
の下付き文字で、この変数はプログラム可能な補完shell関数でのみ使用できます.COMP_LINE:現在のコマンドラインですが、この変数はプログラム可能な補完shell関数でしか使用できません.COMP_POINT:現在のカーソル位置は、現在のコマンドラインの先頭に対する下付きであり、現在のカーソル位置が現在のコマンドラインの末尾にある場合、この変数の値は“${#COMP_LINE}”
と同じであり、この変数はプログラム可能な補完shell関数でのみ使用できます.COMP_TYPE:整数値で、補完関数の呼び出しがトリガーされたときに補完しようとするタイプに対応し、正常補完は“TAB”
であり、タブを連続的に入力した補完リストは“?”
であり、他の部分補完項目は“!”
であり、単語を変更せずに補完項目は“@”
であり、補完メニューは“%”
である.この変数はプログラマブル補完shell関数でのみ使用できます.COMP_KEY:現在の補完関数のキー、またはキーシーケンスの最後のキーをトリガーします.COMP_WORDBREAKS:「readline」ライブラリは、単語補完時に単語区切りの文字として使用されますが、この変数が設定されていなければ、後でリセットしても特殊な役割を果たしません.COMP_WORDS:現在のコマンドラインの各単語を含む配列変数で、「readline」と同様に現在の行がCOMP_WORDBREAKSは単語に分割され、この変数はプログラム可能な補完shell関数でしか使用できません.COMPREPLY:呼び出したshell関数で生成された補完エントリをプログラム可能に補完する配列変数.bashはこの変数から読み出す.5、例
テストスクリプトは次のとおりです.
function autotab() {
echo "function autotab called $@"
}
autotab_list=("aa" "bb" "cc" "dd" "123")
function _autotab() {
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "${autotab_list[*]}" -- ${cur}) )
return 0
}
complete -F _autotab autotab
例ではshellコマンドラインでコマンドautotabを実行する場合、コマンドが入力されていない場合、Tabキーを押すとこのコマンドが補完され、コマンドcompleteおよび関数_を介していくつかのパラメータが表示または補完されます.Autotab完了、配列autotab_Listの各要素はコマンドのパラメータに拡張されます.