首页 > 其他分享 >Bash_Completion安装及使用

Bash_Completion安装及使用

时间:2022-09-22 15:58:09浏览次数:73  
标签:Completion completion 完成 sh Bash TAB 安装 bash complete

本文分享自华为云社区《有用的 Linux Bash_Completion 命令示例(Steroids 上的 Bash 命令行补全)》,作者:Tiamo_T 。

在 Linux 中,在键入命令时,如果按两次 TAB,它将列出所有以键入字符开头的可用命令。

这不是什么新鲜事,可能你已经知道了。此功能称为 bash 完成。默认情况下,基本文件和目录名称补全在 bash 命令行中可用。

但是,我们可以对这个 bash 补全进行加速,并使用 complete 命令将其提升到一个新的水平。

本教程解释了我们如何使用可编程完成将自动完成应用于选项和命令的参数。

例如,在输入 write 命令后,如果按两次 tab,自动补全会提供用户列表来执行 write 操作。

$ write [TAB][TAB]
bala      raj
jason     randy
john      ritu
mayla thomas
nisha     www-data

在以下示例中,它将显示 telnet 命令的可用主机名:

$ telnet [TAB][TAB]
localhost  dev-db  fileserver

要在终端中获得可编程完成,您只需要运行 /etc/bash_completion ,如下所示,

# . /etc/bash_completion

您还可以取消注释 /etc/bash.bashrc(来自 ubuntu linux 13.04)中的以下行,这样您就不必显式运行上述命令,

 enable bash completion in interactive shells
if ! shopt -oq posix; then
 if [ -f /usr/share/bash-completion/bash_completion ]; then
 . /usr/share/bash-completion/bash_completion
 elif [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
  fi
fi

如果你没有找到这些行和 /etc/bash_completion 文件,那么你只需要通过apt-get安装名为 bash_completion 的包

1.查看现有的bash-completion

启用可编程 bash 完成后,定义了一组 bash 完成。命令 complete 用于定义 bash 完成。

要查看现有的 bash 完成,请使用如下所示的 complete 命令。

complete -p | less

在上面的示例中,选项 -p 是可选的。

2. Bash 标准补全列表

Bash 默认为 Linux 用户提供以下标准补全。

  1. 变量名完成
  2. 用户名完成
  3. 主机名完成
  4. 路径名完成
  5. 文件名完成

我们在之前的bash 标准完成文章中讨论了这些内容。

3. 定义获取命令的完成

使用 -c 命令定义完成以获取可用命令列表作为参数。在以下示例中,完成是为哪个命令定义的,

$ complete -c which
$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

如上所示,通过按“y”,所有命令将被列出。

4. 定义获取目录的完成

使用选项 d,可以将完成定义为仅获取目录名称作为参数。在以下示例中,为 ls 定义了完成,

$ ls
countfiles.sh  dir1/          dir2/          dir3/
$ complete -d ls
$ ls [TAB][TAB]
dir1/          dir2/          dir3/

如上所示,按 Tab 仅显示目录。

5. 定义获取后台作业名称的完成

使用完成,还可以获取作业名称作为命令的参数。选项 j 用于将作业名称作为参数传递给命令作业,如下所示,

$ jobs
[1]-  Stopped                 cat
[2]+  Stopped                 sed 'p'
$ complete -j ./list_job_attrib.sh
$ ./list_job_attrib.sh [TAB][TAB]
cat   sed

谈到后台作业,您还应该知道如何使用这些示例管理Linux 后台作业。

6. 前缀和后缀补全

可以使用要添加的所需前缀和要附加实际完成的后缀来定义完成。在以下示例中,为 list_job_attrib.sh 定义了前缀和后缀,

$ jobs 
[1]+  Stopped                 cat
$ complete -P '">' -S '<"' ./list_job_attrib.sh
$ ./list_job_attrib.sh [TAB][TAB]
$ ./list_job_attrib.sh ">cat<"

7. 文件名和目录完成与排除

考虑脚本完成运行,输出被写入输出目录,如下所示

$ cd output/
$ ls
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt
parser_mod.tmp extract.o

在上面,如果您需要忽略 .tmp 和 .o 文件以使用 ls 命令自动完成,那么,

$ export FIGNORE='.tmp:.o'
$ complete -f -d ls
$ cd output
$ ls [TAB][TAB]
all_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txt

FIGNORE 是包含文件名后缀的 shell 变量,这些后缀在自动完成中被排除。

8. 通过 IFS 拆分字符串以获得完成值

可以使用 -W 选项提及单词列表,并使用 IFS 变量中的值进行拆分。然后每个结果单词都被扩展并显示为完成,

$ export IFS=" "
$ complete -W "bubble quick" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble   quick

如上所述,通过IFS分隔符分割字符串后,单词得到扩展,因此也可以将这些作为变量,如下所示,

$ echo $SORT_TYPE1
bubble
$ echo $SORT_TYPE2
quick
$ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble   quick

9. 编写你自己的函数来生成完成

它允许您包含一个函数来定义完成。使用 -F 选项,传递给完成命令的函数名称并被执行以生成完成。例如,函数编写如下所示,

_parser_options()
{
  local curr_arg;
 curr_arg=${COMP_WORDS[COMP_CWORD]}
 COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) );
}

在上述函数中,

  1. COMPREPLY :数组保存按 [TAB][TAB] 后显示的完成结果
  2. COMP_WORDS :在命令行上键入的单词数组
  3. COMP_CWORD :COMP_WORDS 数组的索引,并且可以在命令行上使用此不同位置的单词进行访问。
  4. compgen : -W 保存可能的完成,并根据 $current_arg 选择相应的参数

文件 parser_option 中存在的此函数的来源如下所示,

$ source parser_option

将此函数链接到您的解析器脚本,如下所示,

$ complete -F _parser_options ./parser.pl
$ ./parser.pl [TAB][TAB]
-i       --incoming       -o       --outgoing       -m       --missed

如上所示,解析器的选项由函数 _parser_options() 生成。

注意:查看 /etc/bash_completion 以查看可编程完成的更多功能。

10. 当主要不生成任何辅助规范时

如果定义的完成规范没有生成匹配项,则使用 comp-option 来完成 -o 选项提到的完成。

$ complete -F _count_files -o dirnames ./countfiles.sh

如上所述,完成是用文件 ./countfiles.sh 的 _count_files 函数定义的。如果 _count_files() 函数未生成任何匹配项,则尝试完成目录。

$ ls 
countfiles.sh    dir1/      dir2/      dir3/
$./countfiles.sh [TAB][TAB]
dir1    dir2    dir3

 

软件安装就是

yum install -y bash-completion

记得source /etc/profile.d/bash_completion.sh

标签:Completion,completion,完成,sh,Bash,TAB,安装,bash,complete
From: https://www.cnblogs.com/52py/p/16719582.html

相关文章

  • python解释器下载与安装+配置环境变量
    一.python解释器的下载与安装......
  • Pycharm的安装并且连接已有的Python环境实现自由编译(附中文配置)|并通过Pycharm实现增加
    Python环境的配置 通过python的官方网站:python.org即可进入python的官网-->选择Downloads即可进入选择版本的界面,在界面中选择自己想要下载的版本即可,下载好之后在安装界......
  • Windows中使用Docker安装Redis
    1、拉取Redis以管理员身份运行CMD,执行如下命令拉取Redisdockerpullredis2、在D盘新建目录D:\Net_Program\Net_Docker\Redis 在D盘新建D:\Net_Program\Net_Doc......
  • Linux系统安装was9
    把was9.0安装文件传到我们的服务器上一共6个IM、sdk、IHS、9.0.0-WS-WAS-FP010、WAS_ND_V9.0_MP_ML、PLUGINS 进到目录下进行依次解压缩[[email protected]......
  • 用友NC金盘安装(Linux)
    首先把我们的NC安装盘传到服务器,把安装盘进行解压[root@nccapp01ncc]#unzipNCCloud1909.zip[root@nccapp01ncc]#ll总用量5108524-rw-r--r--1rootroot523......
  • Centos7.6安装中文字体
    Centos7.6安装中文字体转: https://blog.csdn.net/liuwenbiao1203/article/details/100096031题注: 最近做一个报表生成功能,在win10系统下测试正常,但部署到......
  • bash的基础特性(二)
    命令补全shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令;命令处理机制:查找内部命令;根据PATH环境变量中设定的目录,自左而右逐个搜索目录下......
  • 安装Scrapy框架
    Scrapy的安装介绍Scrapy框架官方网址:http://doc.scrapy.org/en/latestScrapy中文维护站点:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.htmlWindows安装方式1.......
  • uos安装安转软件
    1.chrome安装wget-q-O-https://dl.google.com/linux/linux_signing_key.pub|sudoapt-keyadd-sudoapt-getupdatesudoapt-getinstallgoogle-chrome-st......
  • Linux安装jdk
    1.在官网下载jdk安装文件,下载地址:https://www.oracle.com/java/technologies/downloads/ 我一直使用的是8,所以我下载的是 jdk-8u341-linux-x64.tar.gz2.解压到/opt/......