Linux中10个有用的命令行补齐命令

本文由 极客范 - 踏雁寻花 翻译自 Balakrishnan Mariyappan。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。

在Linux系统中,输入一个命令,再按两次TAB键,就会列出所有以输入字符开头的可用命令。这并不新鲜,很可能你已经知道了这个。这个功能被称作命令补全。默认情况下,bash命令行可以自动补全文件或目录名称。不过,我们可以使bash命令行补全执行更多的操作,通过补全命令可以让它成就下一个辉煌。

这个教程说明了我们是怎样使用可编程的命令行补全功能(programmable completion)把自动补全的功能应用于选项或者命令行参数。

例如:在输入write 命令之后,如果你按两次TAB按键,自动补全功能会提供执行write操作的列表。

在下面的例子中,输入telnet命令将会显示可用了主机名:

要让可编程命令补全功能在你的终端起作用 ,你只需要执行/etc/bash_completion即可,就像下面展示出来的操作:

你也可以取消/etc/bash.bashrc(对于Ubuntu Linux 13.04系统)下面的注释,这样,你就可以不需要执行上面的命令了,

如果你没有发现这些代码,也没有找到/etc/bash_completion文件,那么你只需要通过使用apt-get命令来安装bash_completion 包即可。

1、查看现有的bash补全命令

启用可编程的bash命令行补全功能,就可以定义一套bash补全命令。命令行补全可以用来定义bash补全命令。

来看一下现有的bash补全功能,使用完整的命令,如下:

选项 -p 是可选择的。

2、Bash中标准补全的列表

Bash为linux用户默认提供了下面的标准补全命令。

  1. 变量名补全(Variablename completion)
  2. 用户名补全(Username completion)
  3. 主机名补全(Hostname completion)
  4. Path路径补全(Pathname completion)
  5. 文件名补全(Filename completion)

我们已经在更早的一篇文章bash standard completion 中讨论了这些。

3、为获取命令定义补全命令

使用-c参数定义一个补全命令来获得可使用的命令列表。在下面的例子中,为which命令定义了补全命令,

就像上面看到的,如果按”y”,所有的命令都会显示出来。

4、为获得目录定义补全命令

使用参数d,定义一个只获得目录名称的补全命令,下面的例子中,定义了ls的补全命令

就像上面看到的,连续按两次TAB,就可以看到目录名称。

5、为获得后台作业名称获得补全命令

通过使用complete命令,把获得job名称作为参数是允许的。参数j用来把job名称作为参数传到命令行,展示如下:

想要了解更多的后台任务,可以通过这些案例来了解下如何管理Linux 后台任务。

6、使用前缀和后缀补全命令

补全命令可以通过被前缀(在后面添加)和后缀(添加在后面)来定义。在下面的例子中,前缀和后缀在list_job_attrib.sh中被定义。

7、具有排除功能的文件名和目录补全

看看下面的脚本,输出output 目录下面的文件:

在上面的例子中,如果你想要排除以.tmp和.o为后缀的文件,实现ls命令的自动补全功能,可以这样:

FIGNORE 是一个shell变量,它包含了排除在自动补全队列中的文件的文件名的后缀。

8、通过IFS变量分割String字符串,得到被分割后的值。

单词表可以通过使用w参数被IFS 变量中定义的字符串分割成多个单词。最终每个单词都会被分开,被显示出来。

如上所述,被IFS分割之后,单词就会被扩展开,所以也可能有下面展示的这些变量。

9、编写你自己的函数以实现自动补全功能

你可以声明一个函数来定义补全功能。使用 -F 参数,被传入到补全命令的函数名,可以执行并。例如,函数可以写成下面的样式。

在上面的函数中,

  1. COMPREPLY :存储在按下[TAB][TAB]之后打印信息的数组。
  2. COMP_WORDS :在命令行输入的单词数组
  3. COMP_CWORD :COMP_WORDS 数组的索引,可以访问命令行中不用位置的单词。
  4. compgen :使用-W参数,持有current_arg变量中尽可能完整的、分开的内容。

文件中parser_option 函数通过source执行如下:

这个函数链接到脚本解析器如下:

就像上面所看到的,解析器的参数可以通过_parser_options函数生成。

注意:查看/etc/bash_completion文件,了解更多的可编程的命令行补全功能函数。

10、当第一规范没有进行匹配时,就需要执行第二规范

通过定义的补全规范,没有进行匹配,那么通过-o参数定义的completion 就会执行。

同上,通过使用_count_files 文件中定义的_count_files 函数定义的completion ,如果_count_files函数没有进行匹配,那么就会执行目录补全。
1
2
3
4
5
$ ls
countfiles.sh    dir1/      dir2/      dir3/
$./countfiles.sh [TAB][TAB]
dir1    dir2    dir3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式开放消息系统 ( RocketMQ ) 的原理与实践

分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题消息的重复问题RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件&#xff…

数据结构02-链表

说明:由于该数据结构是由java并且是原生实现,所以与C有一些出入,不过原理是相同的 1.链表的定义 为了表示线性表元素a与a1的逻辑关系,存储数据时,除了存储元素本身的信息之外,还存储了直接后继元素的位置信…

第四章 面向对象

第四章 面向对象 1. 基本格式 定义:当函数(业务功能)比较多,可以使用面向对象来进行归类,如果有一个凡事使用的公共值,也可以放到对象中 #格式&关键字 class 类名:def __inti__(self,x)self.x xdef 方法名(self,name):print(…

洛谷P2347 砝码称重 某一年noip提高组原题

可以转化为01背包求方案数的问题&#xff0c;dp数组f[][]表示第几个砝码能称出的重量,可压缩至一维 转移方程为f(i,j)f(i-1,j-w[i]) 当前我们可以称出的重量必定是由之前的砝码重量转移过来的 #include<bits/stdc.h> using namespace std; const int N550; const int max…

解决:-bash: unzip: command not found (Linux 中 unZip/Zip 的安装及使用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux系统没有自带的压缩解压工具&#xff1b;需要我们自己安装&#xff1b; 当用到zip或者unzip如果没有安装就会出现 unzip: Command…

云计算时代IT专业人员需具备的10项技能

摘要&#xff1a;IT专业人员需要不断的学习&#xff0c;才能确保自己的工作能力跟上时代的步伐。云时代IT专业人员不仅需要具备一定的专业技能&#xff0c;比如快速运用自身知识快速在互联网上构建应用程序&#xff0c;还必须具备商业、金融、业务需求分析等等。 【编者按】谈…

java自定义注解学习笔记

注解学习笔记之自定义注解 Target&#xff08;{1,2,3,4,5,6,7}&#xff09; 1.ElementType.CONSTRUCTOR:用于描述构造器2.ElementType.FIELD:用于描述域3.ElementType.LOCAL_VARIABLE:用于描述局部变量4.ElementType.METHOD:用于描述方法5.ElementType.PACKAGE:用于描述包6.Ele…

[xsy3132]数表

题意&#xff1a;一个$n\times m$的数表&#xff0c;数值$\in[0,4)$&#xff0c;你可以任意次选择一行或一列$1,\text{mod }4$&#xff0c;要最小化所有数的和 因为$n\leq10$&#xff0c;所以数表可以看成$m$个$n$位$4$进制数$a_{1\cdots m}$&#xff0c;以下使用不进位加法 定…

linux 下载、安装 maven

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 创建maven的文件夹并下载maven的tar包到此文件夹中 //进入一个目录 cd /usr/local//创建一个文件夹 mkdir maven//下载maven的tar包…

ELK4之进阶学习

1.精确查找和模糊查找(term和match的区别) match经过分析(analyer)的, term是不经过分词,直接去倒排索引中查找精确的值. 2.建议器的简介(最左前缀或者自带的做) (1)直接用现成的 (2)不只是纠错,还有建议等等. (3)优点:用户体验,服务器减少请求(减少压力,太耗电了,热量太大) (4…

女人必知 教你认清6种隐性坏男人

周围不乏有女朋友喜欢历数往事、追忆曾擦肩而过的男人&#xff0c;有的说如果不是自己太苛求提早要见他家人引起反感&#xff0c;早就和心爱的人俪影双双甜蜜快乐了&#xff0c;还有的说暗恋的男生那一夜向他表露情感、她万分感动、可男生最后提出上床她拒绝了、因而错失了一段…

c# 编程学习(二)

2019独角兽企业重金招聘Python工程师标准>>> 标识符是对程序中的各个元素进行标识的名称。  只能使用字母(大写和小写)、数字和下划线  标识符必须以字母或下划线开头 变量是容纳值的存储位置。可将变量想象成容纳临时信息的容器 命名变量的建议&#xff1a; …

linux 中的 nohup 命令(设置后台进程): nohup: ignoring input and appending output to ‘nohup.out’

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Linux 下使用 nohup Unix/Linux下一般比如想让某个程序在后台运行&#xff0c;很多都是使用 & 在程序结尾来让程序自动运行。 …

PowerDesigner表结构和字段大小写转换

原文&#xff1a;https://www.cnblogs.com/zhzhang/p/3946609.html 【转】PowerDesigner表结构和字段大小写转换 【转自】http://blog.csdn.net/xysh1991/article/details/8016192 使用方法&#xff1a;进入PowerDesigner&#xff0c;打开一个PDM&#xff0c;在菜单栏找到&…

解决:Could not find or load main class org.apache.rocketmq.example.quickstart.Producer

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.情景描述 &#xff1a;我只是想安装运行 rocketmq&#xff0c;执行命令&#xff1a; sh bin/tools.sh org.apache.rocketmq.example.…

深入理解C++ 虚函数表

目录 深入理解C 虚函数表虚函数表概述单继承下的虚函数表派生类未覆盖基类虚函数派生类覆盖基类虚函数多继承下的虚函数表无虚函数覆盖派生类覆盖基类虚函数钻石型虚继承总结几个原则安全性问题深入理解C 虚函数表 ​ C中的虚函数的作用主要是实现了多态的机制。关于多态&#…

react-native-baidu-map使用及注意问题

使用组件&#xff1a; react-native-baidu-map 获取百度地图API_KEY 地址&#xff1a;lbsyun.baidu.com&#xff0c;在控制台成功创建应用后&#xff0c;就可以看到应用的api key了 安装 yarn add react-native-baidu-map 复制代码原生部分 Android配置 react-native link reac…

简单扫清身体垃圾

“我们的身体在被‘设计’之初&#xff0c;就拥有了自主扫除体内垃圾的功能。只不过&#xff0c;这需要我们按照正确的方法去激发它 。”美国畅销书作者乔斯卡曼和朱莉佩莱斯&#xff0c;在她们去年合著的《自我清洁》一书中强调了养成良好生活习惯可为身体排毒的重要性。 近日…

linux (阿里云 CentOS7) 中安装配置 RocketMQ

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JDK1.8的安装&#xff1a; 1.检查系统的JDK版本 根目录下操作&#xff1a;cd java -version 2.检测JDK安装包 rpm -qa | grep ja…

Bootstrap简介

1.使用准备 1.1 Bootstrap的下载 http://www.bootcss.com&#xff0c;下载用于生产环境的Bootstrap即可。 1.2 Bootstrap包含的内容 ● 全局CSS&#xff1a;基本的 HTML 元素均可以通过 class 设置样式并得到增强效果&#xff1b;还有先进的栅格系统。 ● 组件&#xff1a;无数…