git
の例を見てみましょう。
$ git<TAB><TAB>
git git-import-dscs git-Shell
git-buildpackage git-import-orig git-upload-archive
git-dch git-pbuilder git-upload-pack
git-import-dsc git-receive-pack
git
の後に注意してください。
$ git <tab><tab>
add fetch Push
am filter-branch rebase
annotate format-patch reflog
apply fsck relink
archive gc remote
bisect get-tar-commit-id repack
blame grep replace
branch help request-pull
buildpackage imap-send reset
bundle import-dsc revert
checkout import-dscs rm
cherry import-orig shortlog
cherry-pick init show
clean instaweb show-branch
clone log stage
column merge stash
commit mergetool status
config mv submodule
credential name-rev subtree
--More--
書くgit re
$ git re<tab><tab>
rebase relink repack request-pull revert
reflog remote replace reset
$ git remote <tab><tab>
add remove set-branches set-url update
Prune rename set-head show
一般的に:
$ command <tab>
[actions]
これらのアクションをプログラムで取得するにはどうすればよいですか?これはシェル/ bashスクリプトを介して可能ですか?
この機能は、BashCompletionと呼ばれるものによって実行されています。これをバックアップするファイルは/etc/bash_completion.d
の下に保存され、各コマンドには独自のファイルがあります。したがって、git
の場合:
/etc/bash_completion.d/git
このファイルを見ると、追加の機能で環境が過負荷になっていることがわかります。特に1つはこの男です:
$ __git_commands
実行すると、サブコマンドのリストが表示されます。
$ __git_commands | head -5
add merge-recursive
add--interactive merge-resolve
am merge-subtree
annotate merge-tree
apply mergetool
これらが環境内の単なる機能であることを知っていると、次のことができます。
$ __git<tab><tab>
__git_aliased_command __git_complete_remote_or_refspec __git_diff_index_files __git_index_files __git_refs
__git_aliases __git_complete_revlist __git_diff_index_helper __gitk_main __git_refs2
__git_commands __git_complete_revlist_file __gitdir __git_list_all_commands __git_refs_remotes
__gitcomp __git_complete_strategy __git_find_on_cmdline __git_list_merge_strategies __git_remotes
__gitcompadd __gitcomp_nl __git_func_wrap __git_list_porcelain_commands __git_tags
__gitcomp_file __git_compute_all_commands __git_has_doubledash __git_ls_files_helper __git_wrap__gitk_main
__git_complete __git_compute_merge_strategies __git_heads __git_main __git_wrap__git_main
__git_complete_diff_index_file __git_compute_porcelain_commands __git_index_file_list_filter __git_match_ctag
__git_complete_file __git_config_get_set_variables __git_index_file_list_filter_bash __git_pretty_aliases
__git_complete_index_file __git_count_arguments __git_index_file_list_filter_compat __git_reassemble_comp_words_by_ref
git
コマンドに関するさまざまな情報を提供するすべてのBashCompletion関数のリストを取得します。
ここで見ているものは プログラム可能な完了 と呼ばれます。 Debian/Ubuntuベースのシステムでは、パッケージは多くの場合、コマンドのプログラム可能な完了を提供するファイルを/usr/share/bash-completion/completions
にインストールします。他のディストリビューションでは、/etc/bash_completion.d
ディレクトリが使用される場合があります(この場所はDebian/Ubuntuでは非推奨ですが、一部のパッケージでは引き続き使用されます)。私にとって、git
の補完を生成する関数を含むファイルは/usr/share/bash-completion/completions/
です。
基本的なプロセスは、COMPREPLY
シェル配列のコンテンツを生成する関数が定義され、これらがcomplete
シェル組み込みを使用して特定のコマンドに登録されることです。
完了の動作方法を変更する場合は、これらのファイルを直接変更するのではなく、システムの更新によって変更が無効になる可能性があるため、必要な関数の新しいバージョンをユーザー固有の場所(.bashrc
など)に作成することをお勧めします。ホームディレクトリ。