[bash-completion]TABキーでコマンドを補完する
bash-completion を導入すると
ターミナルで<TAB>を押下した際に、現在の入力状況に応じて、続くコマンドなどが自動補完されるようになります。
例えば、docker
と入力したあとに<TAB>とすると、以下のようにdocker
で利用可能なコマンドが羅列されます。
$ docker <TAB>
attach container engine history inspect logs port restart search stats top volume
build context events image kill network ps rm secret stop trust wait
builder cp exec images load node pull rmi service swarm unpause
commit create export import login pause push run stack system update
config diff help info logout plugin rename save start tag version
前提
Mac OS
でのbash利用を前提としたコマンドを記載します。
bash-completionの導入
Homebrewを用いてインストールします。
brew install bash-completion
つづいて、.bash_profile
にcompletionを読み込むコマンドを記載します。
if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi
ここで一度Command + Q
でターミナルを終了させて再起動させるか、. $(brew --prefix)/etc/bash_completion
などで.bash_profileに追記した部分を読み込ませるようにしてください。
この時点でいくらかのbashコマンドに補完が効くようになります。補完対象となるコマンドはls -l $(brew --prefix)/etc/bash_completion.d
にて確認可能です。
$ ll $(brew --prefix)/etc/bash_completion.d
total 536
lrwxr-xr-x 1 mintak admin 62 1 5 00:00 abook -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/abook
lrwxr-xr-x 1 mintak admin 60 1 5 00:00 ant -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/ant
lrwxr-xr-x 1 mintak admin 67 1 5 00:00 apache2ctl -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/apache2ctl
lrwxr-xr-x 1 mintak admin 60 1 5 00:00 apt -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/apt
lrwxr-xr-x 1 mintak admin 66 1 5 00:00 apt-build -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/apt-build
lrwxr-xr-x 1 mintak admin 65 1 5 00:00 aptitude -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/aptitude
lrwxr-xr-x 1 mintak admin 63 1 5 00:00 aspell -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/aspell
lrwxr-xr-x 1 mintak admin 65 1 5 00:00 autoconf -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/autoconf
lrwxr-xr-x 1 mintak admin 65 1 5 00:00 automake -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/automake
lrwxr-xr-x 1 mintak admin 64 1 5 00:00 autorpm -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/autorpm
lrwxr-xr-x 1 mintak admin 53 12 22 12:37 bash -> ../../Cellar/heroku/7.35.1/etc/bash_completion.d/bash
lrwxr-xr-x 1 mintak admin 70 1 5 00:00 bash-builtins -> ../../Cellar/bash-completion/1.3_3/etc/bash_completion.d/bash-builtins
・・・・・・(以下略)
各種コマンドへの補完対応
docker
などのプリインストールされていないコマンドに対する補完は上記だけでは有効になりません。それぞれに必要となる補完用スクリプトをcompletionディレクトリに配置して、読み込ませる必要があります。1
いくつか具体的なコマンドで例を紹介しておきます。
docker
curl -L https://raw.githubusercontent.com/docker/docker-ce/$(docker --version \
| awk -F' ' '{print $3}' | cut -c 1-5)/components/cli/contrib/completion/bash/docker \
> $(brew --prefix)/etc/bash_completion.d/docker
docker-compose
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose \
> $(brew --prefix)/etc/bash_completion.d/docker-compose
git
curl -L https://raw.githubusercontent.com/git/git/v$(git version | awk -F' ' '{print $3}')/contrib/completion/git-completion.bash \
> $(brew --prefix)/etc/bash_completion.d/git
vagrant
curl -L https://raw.githubusercontent.com/hashicorp/vagrant/v$(vagrant -v | awk -F' ' '{print $2}')/contrib/bash/completion.sh \
> $(brew --prefix)/etc/bash_completion.d/vagrant
kubectl(Kubernetes)
kubectl completion bash \
> $(brew --prefix)/etc/bash_completion.d/kubectl
ansible系(NonOfficial)
curl -L https://raw.githubusercontent.com/dysosmus/ansible-completion/master/ansible-completion.bash\
> $(brew --prefix)/etc/bash_completion.d/ansible
curl -L https://raw.githubusercontent.com/dysosmus/ansible-completion/master/ansible-playbook-completion.bash\
> $(brew --prefix)/etc/bash_completion.d/ansible-playbook
curl -L https://raw.githubusercontent.com/dysosmus/ansible-completion/master/ansible-vault-completion.bash\
> $(brew --prefix)/etc/bash_completion.d/ansible-vault
terraform
echo "complete -C /usr/local/Cellar/tfenv/1.0.2/versions/0.12.20/terraform terraform" \
> $(brew --prefix)/etc/bash_completion.d/terraform
※echoの内容はterraform -install-autocomplete
によって.bashrc
に追加された内容
リポジトリにはterraform -install-autocomplete
を実行するように記載されていますが、
これだと.bashrc
に記述が追加されてしまいます。
そこで他とあわせてbash_completion.d
ディレクトリに埋め込むようにしています。
-
dockerやgitなどをhomebrew経由ですでに導入済みの場合、続く作業を行わなくともシンボリックリンクがはられて有効になることもあるようです。
ls -l $(brew --prefix)/etc/bash_completion.d/ | grep docker
(grep 部分を確認対象に変更して確認)で結果が戻ってくる場合は、すでにCompletionが有効になっています。 ↩
Author And Source
この問題について([bash-completion]TABキーでコマンドを補完する), 我々は、より多くの情報をここで見つけました https://qiita.com/mintak21/items/5000972294d4413471ab著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .