linux自定义自动补全命令

这篇具有很好参考价值的文章主要介绍了linux自定义自动补全命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动补全命令,就是在我们输入命令的时候使用Tab键可以补全命令,或展示可能的命令

如nginx目录下

我们看到有以下文件

linux自定义自动补全命令

1. 只有一条命令满足的情况

linux自定义自动补全命令

 输入部分指令后,按下tab键,如果只有一个命令满足,则会补全完整的命令

linux自定义自动补全命令

2. 有多条命令满足的情况

linux自定义自动补全命令

 此时我们按下Tab键,不会完成补全,这是如果我们连续按下两次Tab键,就会把所有复合的命令都展示出来

linux自定义自动补全命令

 这时我们继续完善命令即可。在完善时可以充分使用Tab键自动补全

如何补全我们自己写的脚本命令呢?

我们找一个场景吧:

一个服务器上启动多个tomcat

linux自定义自动补全命令

在x_install文件夹中放了多个服务

linux自定义自动补全命令

 

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 '请输入服务名:'$serviceNames
	exit 1
fi

isService=$(echo $serviceNames | grep "${serviceName}")
if [[ "$isService" = "" ]]; then
	echo '无效服务名'
	echo '服务名:'$serviceNames
	exit 1
fi

if [ x"$2" = x ]; then 
	echo '请输入执行命令:'$commands
	exit $RETVAL
fi

isCommand=$(echo $commands | grep "$2")
if [[ "$isCommand" = "" ]]; then
	echo '无效执行命令'
	echo '命令:'$commands
	exit $RETVAL
fi

export CATALINA_HOME=$TOMCAT_HOME
export CATALINA_BASE=$CATALINA_HOME/x_install/$serviceName

num=0
if [ x"$3" != x ]; then
num=$3
fi


start() {
ps aux |grep $CATALINA_BASE/conf |grep -v "grep" >/dev/null
if [ $? -eq 0 ];then
   echo  $serviceName" is running"
else      
   echo "tomcat is down"
   
   find / |grep "/jre/lib/rt.jar" |grep -v "grep" >/dev/null
	if [ $? -eq 0 ];then
		javahome=$(find / |grep "/jre/lib/rt.jar" |head -1 |awk '{print $1}')
		export JRE_HOME=${javahome%*/lib/rt.jar}
		export PATH=$JRE_HOME/bin:$PATH
		export CLASSPATH=.:$JRE_HOME/lib
		if [[ "$serviceName" = "ReviewService" ]]; then
			echo $serviceName' 设置运行内存1024m'
			export JAVA_OPTS='-Xms128m -Xmx1024m'
		elif [[ "$serviceName" = "BiddingService" ]]; then
			echo $serviceName' 设置运行内存1024m'
			export JAVA_OPTS='-Xms128m -Xmx1024m'
		elif [[ "$serviceName" = "OpenBiddingService" ]]; then
			echo $serviceName' 设置运行内存1024m'
			export JAVA_OPTS='-Xms128m -Xmx1024m'
		else
			export JAVA_OPTS='-Xms128m -Xmx512m'
		fi
	else
		  echo "未找到java环境"
		  exit $RETVAL
	fi
   
   if [ $num != 0 ]; then
   echo "开启调试:端口[$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.sh
   if [ $? -eq 0 ];then
      echo $serviceName" start successfull"
   else
      echo $serviceName" start fail" 
   fi
fi
}

stop(){
  
  ps aux |grep $CATALINA_BASE/conf |grep -v "grep" >/dev/null
  if [ $? -eq 0 ];then
      echo  $serviceName" is running"
      echo "now start stop "$serviceName
	  $CATALINA_HOME/bin/shutdown.sh
      tomcatpid=$(ps aux |grep $CATALINA_BASE/conf |grep -v "grep"|awk '{print $2}')
	  if [ x"$tomcatpid" != x ]; then
	    kill -9 $tomcatpid
	  fi
      echo $serviceName" already stoped"
  else
      echo $serviceName" is stoped"
  fi
}

log(){
	if [ $num != 0 ]; then
		tail -n $num $CATALINA_BASE/logs/catalina.out
	else
		tail -f $CATALINA_BASE/logs/catalina.out
	fi
}

errlog(){
	if [ $num != 0 ]; then
		tail -n $num $CATALINA_BASE/logs/catalina.out |grep Exception
	else
		tail -f $CATALINA_BASE/logs/catalina.out |grep Exception
	fi
}

status(){
  ps aux |grep $CATALINA_BASE |grep -v "grep" >/dev/null
  if [ $? -eq 0 ];then
      echo  $serviceName" is running"
  else
      echo $serviceName" is stoped"
  fi
}

# See how we were called.

usage()
{
   echo "Usage: $1{服务名称} $2 {start|stop|restart|status|log|errlog}"
   RETVAL="2"
}

case "$2" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    log) 
        log 
        ;;
    errlog) 
        errlog 
        ;;
    *)
      usage
      ;;
esac

exit $RETVAL

把脚本放到我们自己自定义命令的目录下

2.在任意目录下可以访问:

我们可以选择使用软连接的方式

#ln -s /opt/tomcat/tomcat.sh /usr/sbin/tomcat

到这里,  你就可以在任意目录下 使用  tomcat 命令了

到这里我们使用Tab键,只能补全对应文件夹下的文件,不满足我们的要求

3.编写bash_completion脚本:

_tomcat()
{
  local cur prev serviceNames commands
  COMPREPLY=()

  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)); then
	COMPREPLY=( $(compgen -W "${serviceNames_str[*]}" -- $cur) )
  fi
  
  if ((COMP_CWORD == 2)); then
	COMPREPLY=( $(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. 这时就可以自动提示我们的命令了

linux自定义自动补全命令

 tomcat 命令后  第一个参数会提示指定目录的文件夹,在自定脚本中设置的serviceNames

linux自定义自动补全命令

 第二个参数会提示需要的命令

 linux自定义自动补全命令

 linux自定义自动补全命令

 详解:

_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 补全命令文章来源地址https://www.toymoban.com/news/detail-487705.html

到了这里,关于linux自定义自动补全命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Debian 不能自动补全命令

    前言 在Debian系统中,命令行自动补全通常是由bash shell的一个功能提供的,这个功能叫做\\\"bash-completion\\\"。如果你的系统不能自动补全命令,可能是因为\\\"bash-completion\\\"没有被正确地安装或配置。 解决 首先,检查\\\"bash-completion\\\"是否已经被安装。可以使用以下命令来检查: 如果\\\"bas

    2024年02月15日
    浏览(59)
  • ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

    官方文档 = 聚合 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html 聚合:对文档信息的统计、分类、运算。类似mysql sum、avg、count 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组(相当于mysql group by) Date Histogram:按照日期阶梯分组,

    2024年02月12日
    浏览(36)
  • ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步

    导航: 【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城  黑马旅游源码:  GitHub: GitHub - vincewm/hotel: 黑马旅游项目 Gitee: hotel: 黑马旅游项目 目录 1.数据聚合 1.1.聚合的种类 1.2.DSL实现聚合 1.2.1.Bucket聚合语法 1.2.2.聚合结果

    2023年04月16日
    浏览(83)
  • 【Docker】如何实现Docker 命令自动补全

    Docker 命令可以使用 tab 键补全。在命令行输入 Docker 命令时,只需输入前几个字符,然后按 Tab 键即可自动补全为正确的命令或参数。 例如,在命令行输入 docker r,然后按 Tab 键,就会自动补全为 docker run 命令。如果有多个以 r 开头的命令或参数,按第二次 Tab 键则会显示所有

    2024年02月07日
    浏览(39)
  • k8s:kubectl 命令设置简写&启用自动补全功能

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes(K8s)是一个强大的容器编排平台,而kubectl则是与之交互的命令行工具。尽管Kubernetes提供了强大的功能,但有时候频繁输入长长的kubectl命令可能会降低效率。为了提高工作效率,我们可以通过设置别名来简化kubectl命令。 在本文

    2024年04月16日
    浏览(56)
  • win下实现Linux的tab自动补全

    声明 :如果不是确定的话 注册表这个东西不建议更改 如果更改的话建议先备份系统 以防意外 win下实现Linux的tab自动补全_weixin_34050389的博客-CSDN博客

    2024年02月12日
    浏览(33)
  • Git使用篇:Mac&Window---Vscode 终端命令行显示分支名和Tab自动补全

    ###:mac终端美化 https://www.jianshu.com/p/fd457aaee3e7 配置地址 终端改成git window终端美化 setting.json修改这个

    2024年02月11日
    浏览(41)
  • 基于GitHub代码库训练模型本地化AI代码自动补全 - Tabby Linux Debian/CentOS

    参考: https://github.com/TabbyML/tabby Docker | Tabby Linux Debian上快速安装Docker并运行_Entropy-Go的博客-CSDN博客 Tabby - 本地化AI代码自动补全 - Windows10_Entropy-Go的博客-CSDN博客 已经有好几款类似强劲的代码补全工具,如GitHub Copilot,Codeium等,为什么还要选择Tabby? Tabby除了和其他工具一样支

    2024年02月05日
    浏览(49)
  • Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

    下面的请求定义了一个名为 “book” 的 Elasticsearch 索引,其中包含一个 具有 “text” 数据类型和 “standard” 分析器且名为 “title” 的字段。此字段用于处理书籍标题的文本数据。定义了名为 “suggest” 的 “completion” 子字段,用于支持实时搜索建议的自动补全功能。 增加测

    2024年02月07日
    浏览(39)
  • ES自动补全

    要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characters and Pinyin. 或者: 链接:https://pan.baidu.com/s/1IH6YEaa0ol039plev1wnag?pwd=dvl5  提取码

    2024年01月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包