linux自定义自动补全命令
自动补全命令,就是在我们输入命令的时候使用Tab键可以补全命令,或展示可能的命令
如nginx目录下
我们看到有以下文件
1. 只有一条命令满足的情况
输入部分指令后,按下tab键,如果只有一个命令满足,则会补全完整的命令
2. 有多条命令满足的情况
此时我们按下Tab键,不会完成补全,这是如果我们连续按下两次Tab键,就会把所有复合的命令都展示出来
这时我们继续完善命令即可。在完善时可以充分使用Tab键自动补全
如何补全我们自己写的脚本命令呢?
我们找一个场景吧:
一个服务器上启动多个tomcat
在x_install文件夹中放了多个服务
1.首选需要我们自己编写命令脚本:
这里我们用tomcat的命令脚本举例,包含了启动、暂停、重启、状态、日志等功能
#!/bin/bash
BUILD_ID=DONTKILLME
TOMCAT_HOME=/opt/tomcat
serviceNames=$(ls /opt/tomcat/x_install/ |grep Service)
commands='start stop restart status log errlog'
RETVAL="0"serviceName=$1
if [ x"$1" = x ]; then echo '请输入服务名:'$serviceNamesexit 1
fiisService=$(echo $serviceNames | grep "${serviceName}")
if [[ "$isService" = "" ]]; thenecho '无效服务名'echo '服务名:'$serviceNamesexit 1
fiif [ x"$2" = x ]; then echo '请输入执行命令:'$commandsexit $RETVAL
fiisCommand=$(echo $commands | grep "$2")
if [[ "$isCommand" = "" ]]; thenecho '无效执行命令'echo '命令:'$commandsexit $RETVAL
fiexport CATALINA_HOME=$TOMCAT_HOME
export CATALINA_BASE=$CATALINA_HOME/x_install/$serviceNamenum=0
if [ x"$3" != x ]; then
num=$3
fistart() {
ps aux |grep $CATALINA_BASE/conf |grep -v "grep" >/dev/null
if [ $? -eq 0 ];thenecho $serviceName" is running"
else echo "tomcat is down"find / |grep "/jre/lib/rt.jar" |grep -v "grep" >/dev/nullif [ $? -eq 0 ];thenjavahome=$(find / |grep "/jre/lib/rt.jar" |head -1 |awk '{print $1}')export JRE_HOME=${javahome%*/lib/rt.jar}export PATH=$JRE_HOME/bin:$PATHexport CLASSPATH=.:$JRE_HOME/libif [[ "$serviceName" = "ReviewService" ]]; thenecho $serviceName' 设置运行内存1024m'export JAVA_OPTS='-Xms128m -Xmx1024m'elif [[ "$serviceName" = "BiddingService" ]]; thenecho $serviceName' 设置运行内存1024m'export JAVA_OPTS='-Xms128m -Xmx1024m'elif [[ "$serviceName" = "OpenBiddingService" ]]; thenecho $serviceName' 设置运行内存1024m'export JAVA_OPTS='-Xms128m -Xmx1024m'elseexport JAVA_OPTS='-Xms128m -Xmx512m'fielseecho "未找到java环境"exit $RETVALfiif [ $num != 0 ]; thenecho "开启调试:端口[$num]"declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$num" fi$CATALINA_HOME/bin/startup.shif [ $? -eq 0 ];thenecho $serviceName" start successfull"elseecho $serviceName" start fail" fi
fi
}stop(){ps aux |grep $CATALINA_BASE/conf |grep -v "grep" >/dev/nullif [ $? -eq 0 ];thenecho $serviceName" is running"echo "now start stop "$serviceName$CATALINA_HOME/bin/shutdown.shtomcatpid=$(ps aux |grep $CATALINA_BASE/conf |grep -v "grep"|awk '{print $2}')if [ x"$tomcatpid" != x ]; thenkill -9 $tomcatpidfiecho $serviceName" already stoped"elseecho $serviceName" is stoped"fi
}log(){if [ $num != 0 ]; thentail -n $num $CATALINA_BASE/logs/catalina.outelsetail -f $CATALINA_BASE/logs/catalina.outfi
}errlog(){if [ $num != 0 ]; thentail -n $num $CATALINA_BASE/logs/catalina.out |grep Exceptionelsetail -f $CATALINA_BASE/logs/catalina.out |grep Exceptionfi
}status(){ps aux |grep $CATALINA_BASE |grep -v "grep" >/dev/nullif [ $? -eq 0 ];thenecho $serviceName" is running"elseecho $serviceName" is stoped"fi
}# See how we were called.usage()
{echo "Usage: $1{服务名称} $2 {start|stop|restart|status|log|errlog}"RETVAL="2"
}case "$2" instart)start;;stop)stop;;restart)stopstart;;status)status;;log) log ;;errlog) errlog ;;*)usage;;
esacexit $RETVAL
把脚本放到我们自己自定义命令的目录下
2.在任意目录下可以访问:
我们可以选择使用软连接的方式
#ln -s /opt/tomcat/tomcat.sh /usr/sbin/tomcat
到这里, 你就可以在任意目录下 使用 tomcat 命令了
到这里我们使用Tab键,只能补全对应文件夹下的文件,不满足我们的要求
3.编写bash_completion脚本:
_tomcat()
{local cur prev serviceNames commandsCOMPREPLY=()cur="${COMP_WORDS[COMP_CWORD]}"prev="${COMP_WORDS[COMP_CWORD-1]}"serviceNames=$(ls /opt/tomcat/x_install/ |grep Service)commands='start stop restart status log errlog'serviceNames_str=`echo ${serviceNames[@]} | sed 's/ /\n/g'| sort -u`if ((COMP_CWORD == 1)); thenCOMPREPLY=( $(compgen -W "${serviceNames_str[*]}" -- $cur) )fiif ((COMP_CWORD == 2)); thenCOMPREPLY=( $(compgen -W "${commands[*]}" -- $cur) )fi
}
complete -F _tomcat tomcat
4. 切换目录
#cd /etc/bash_completion.d
上传脚本文件 tomcat.bash
5. 生效自动补全脚本
#source /usr/share/bash-completion/bash_completion
6. 这时就可以自动提示我们的命令了
tomcat 命令后 第一个参数会提示指定目录的文件夹,在自定脚本中设置的serviceNames
第二个参数会提示需要的命令
详解:
_tomcat 定义函数名
cur="${COMP_WORDS[COMP_CWORD]}" 我们正在输入的词
prev="${COMP_WORDS[COMP_CWORD-1]}" 命令中上一个词
serviceNames 存放我们需要自动补全的服务(文件夹名称)
commands 可以使用的命令集合
COMP_CWORD 第几个词
COMPREPLY=( $(compgen -W "${serviceNames_str[*]}" -- $cur) ) 输出或自动补全
complete -F _tomcat tomcat 指定当命令为tomcat时,使用_tomcat 补全命令
linux自定义自动补全命令相关推荐
- 使用Linux自定义自动补全命令完善自己的shell脚本
对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...
- linux命令补全包安装,RED HAT LINUX bash 自动补全命令安装
RHEL / CentOS 怎么启用bash命令自动补齐功能呢?请看下面 准备工作:系统镜像,配置好yum源. 1.首先需要安装bash-completion 包:[root@server src]# ...
- TeXworks自定义自动补全功能
2021年1月25日更新: 经过这些年对Sublime Text3, VSCode, TeXStudio写LaTeX文件的摸索,非常建议放弃原教旨主义的TeXWorks,使用TeXStudio.TeX ...
- 如何配置MAC的终端自动补全命令行
我相信有很多小伙伴之前在使用windows系统的时候一定喜欢使用键盘的"Tab"按键来自动补全命令行.这一点MAC可以实现,不过需要进行配置,具体的配置过程如下: 1.打开终端,输 ...
- linux自动补全命令插件,vim自动补全插件snipMate
linux下安装vim自动补全插件snipMate 环境:ubuntu 下载snipMate 官方网站:http://www.vim.org/scripts/script.php?script_id= ...
- linux 函数自动补全,Shell脚本中实现自动补全功能
对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...
- Ros无法自动补全命令的解决
在Linux系统中新安装的Ros环境,发现shell自动补全功能不好使,有的时候不太方便. 需要安装bash-completion和rosbash 解决办法 helloRos@ubuntu:slam$ ...
- linux python自动补全_Linux下在python命令行中自动补全代码(py2、3,centos、ubuntu)...
每次只在shell中测试少量代码,纯手打也有点麻烦 安装ipython也可以实现这个功能,不过破机子有时候反映会稍微卡顿,比较麻烦 1.不管有没有这个文件,直接打开这个文件 vi ~/.pystart ...
- Bash、Terminal通过tab忽略大小写自动补全命令行提示
cd ~ touch .inputrc echo 'set completion-ignore-case on' >> .inputrc echo 'set show-all-if-amb ...
- linux下自动补全问题: autocomplete sh: ( compgen -d — ” ): No such file or directory
autocomplete sh: <( compgen -d - " ): No such file or directory http://www.dansketcher.com/2 ...
最新文章
- 建立一个php 基础类
- android contentresolver权限,求助关于getcontentresolver().query()
- Python3不存在reduce函数
- 从assemblyer Instructure deepth understander C principle
- 从无到有算法养成篇-链式存储结构之循环链表
- Anaconda中Jupyter notebook打开后闪退问题解决方法
- S4 KNUMH的设计原理
- datatables 配套bootstrap3样式使用小结(1)
- Atitit ioc 之道 attilax著 第2章 装配Bean 33 2.1 Spring配置的可选方案 34 2.2 自动化装配bean 35 2.2.1 创建可被发现的bean 35 2.
- ES6、7学习笔记(尚硅谷)-6-形参默认值的设置
- php如何识别flac文件,flac是什么格式
- Coreset-Based Neural Network Compression简记
- 千兆光纤 GBIC和SFP接口规格介绍
- 迷失在森林里的小女孩
- 最近超火的公司前端面试题
- 时光机穿梭(管理修改)
- spss对数据进行因子分析
- win10怎么录屏?windows自带录屏功能怎么用
- 链栈的基本操作-C语言
- linux运行python程序
热门文章
- NOJ [F] 懒惰的风纪委Elaine 求一堆数能组成多少个数小于等于n
- wps怎么把两张图片组合_如何对word/wps中的多个图片进行组合。 专家详解
- 计算机 64虚拟内存设置方法,win7 64位系统虚拟内存设置及虚拟内存太小的影响...
- Jenkins容器由于虚拟内存不足导致的异常退出
- python实现pdf转换成图片
- PTA(类和对象)用java写 7-2 定义商品类,封装成员变量,输出对象
- MacBook Pro 触摸板手势突然失效的解决方案
- 通过V90PN通讯故障实例来看线路干扰与线路错误的区别
- 软件测试技术课后习题:第9章软件测试自动化-广东高等教育出版社,主编杨胜利
- Word转成PDF后目录出现未定义书签是怎么回事