我的docker隨筆6:docker命令自動補齊
背景
在筆者自己製作並安裝的ubuntu16.04系統上(參考筆者網站關於debootstrap的文章),無法使用docker自動補齊功能,即輸入docker命令後,按Tab鍵無法列出子命令(或引數)的候選項。於是在網上找了些資料,實現了這個功能,形成本文。
機制
Linux系統許多命令都會提供該命令自身的命令補齊指令碼,在安裝命令時會自動安裝自動補齊指令碼——如果有的話。該機制在Linux中被稱為bash-complete。在/usr/share/bash-completion/completions
目錄下有許多命令自動補齊的指令碼,可自行查閱。與docker有關的,有2個:docker和docker-compose。如下:
# ls /usr/share/bash-completion/completions/docker*
/usr/share/bash-completion/completions/docker /usr/share/bash-completion/completions/docker-compose
自動補齊需要依賴工具bash-complete,如果沒有,則需要手動安裝,命令如下:
sudo apt-get install -y bash-completion
安裝成功後,得到檔案為 /usr/share/bash-completion/bash_completion
,如果沒有這個檔案,則說明系統上沒有安裝這個工具。
實踐
讓配置指令碼生效的方法是執行source xxx
命令,先執行source /usr/share/bash-completion/completions/docker
,再輸入docker
,然後按2次Tab鍵,提示錯誤如下:
docker bash: _get_comp_words_by_ref: command not found
bash: [: : integer expression expected
bash: [: : integer expression expected
bash: [: : integer expression expected
bash: _get_comp_words_by_ref: command not found
bash: [: : integer expression expected
bash: [: : integer expression expected
bash: [: : integer expression expected
注:第一行的docker,實際是輸入的命令,其它是按Tab鍵的輸出資訊。
前面已經安裝了bash_completion
,於是想到執行
source /usr/share/bash-completion/bash_completion
再次嘗試,發現可以正常列出docker的子命令,示例如下:
$ docker
attach cp export import login pause push run stack system version
build create help info logout plugin rename save start tag volume
commit diff history inspect logs port restart search stats top wait
config events image kill network ps rm secret stop unpause
container exec images load node pull rmi service swarm update
試試docker-compose命令,如下:
# docker-compose (注:此處按2次Tab鍵)
build config down exec kill pause ps push rm scale stop up
bundle create events help logs port pull restart run start unpause version
嘗試容器名稱的自動補齊功能:
# docker logs latelee- (注:輸入latelee-後按2次Tab鍵)
latelee-wordpress latelee-apache latelee-mysql
latelee-zentao latelee-gitlab latelee-jenkins
至此,docker、docker-compose自動補齊功能已完成,重啟系統後,也能進行自動補齊。類似地,對於k8s,也有相應的命令補齊功能,不過k8s是另外的話題了。
小結
Linux的大量命令讓人望而生畏,但如果掌握了Tab鍵功能,則可減少大量命令輸入工作,提高效率。
李遲 2017.7.3 晚