Linux命令參數自定義補全

使用場景

線下測試環境,我作了個相似堡壘機的集中登陸管理,先將IP與主機名經過host文件作映射,並集中管理到某臺服務器(堡壘機),而後用腳本去讀取host文件,再用自定義登陸命令直接登陸的操做,可是我想在登陸的時候,能夠打印出將要輸入的信息,且能自動補全IP或者主機名,避免複製的麻煩linux

complete設置自動補全

linux自帶有這個命令,能夠設置bash自動補全的動做,bash終端默認狀況下shell

  • 命令自動補全
  • 變量自動補全
  • 目錄自動補全
  • 文件名補全
  • ...

只須要按tab鍵,咱們諸如輸入某個命令的前綴字段,就能夠模糊匹配出來,可是對於命令的參數補全,沒有默認設置
complte 直接輸入命令能夠查看當前自定義和默認的自動補全vim

[root@test ~]# complete
complete -o filenames -F __udisks udisksbash

經常使用參數

complete參數不少,用法也不少,可使用man來查看,可是man的內容實在太多,其實實現上述需求很簡單,下面簡單介紹下幾個參數及用法服務器

  • -A action 後面接動做,動做以下ssh

    • alias 別名的命令,將該命令輸出來補全命令
    • command 至關於complete -c,將bash的命令名稱來補全命令
    • directory 至關於complete -d,獲取當前目錄下目錄名稱來補全命令
    • export 至關於complete -e,獲取bash變量名稱來補全命令
    • file 至關於complete -f,基本上是命令的默認補全,獲取當前目錄下的文件及目錄名來補全命令
    • group 至關於complete -g,獲取系統用戶組名來補全命令
    • user 至關於complete -u,獲取系統用戶來補全命令
    • hostname 獲取/etc/hosts的主機名來補全命令[注:可使用該命令來完成需求]
  • -C command 在子shell中執行command內容,並將其內容用來補全命令
  • -G globpat 擴展目錄來補全命令
  • -W wordlist 跟參數,將worlist參數用來補全命令[注:也可使用該命令來完成需求]

完成需求

瞭解完命令,就很容易實現了,兩種方法
1.complete -A hostname ssh測試

clipboard.png

[root@test]# ssh ptest_21**tab鍵**
ptest_214 ptest_215 ptest_216 ptest_218 ptest_219spa

這樣就能夠補全host主機名而後登陸,是否是方便很多呢code

2.complete -W 'host1 host2 host3' ssh
我在vim ~/.bashrc裏面設置,而後source便可
hn=$(cat /etc/hosts |grep -v '#'|awk '{print $2}')
complete -W "$hn" sship

若是想把IP補全也加進來
ip=$(cat /etc/hosts |grep -v '#'|awk '{print $1}')
complete -W "$hn $ip" ssh

clipboard.png

相關文章
相關標籤/搜索