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

相关文章
相关标签/搜索