您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux百科

10种有用的Linux Bash_Completion 命令示例

时间:2022-08-18 16:14:39  来源:  作者:华为云开发者联盟

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

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

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

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

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

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

$ write [TAB][TAB]bala      rajjason     randyjohn      ritumayla thomasnisha     www-data

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

$ 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 shellsif ! 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  fifi

如果你没有找到这些行和 /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. 1.变量名完成
  2. 2.用户名完成
  3. 3.主机名完成
  4. 4.路径名完成
  5. 5.文件名完成

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

3. 定义获取命令的完成

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

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

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

4. 定义获取目录的完成

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

$ lscountfiles.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/$ lsall_calls.txt   incoming_calls.txt   outgoing_calls.txt   missed_calls.txtparser_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_TYPE1bubble$ echo $SORT_TYPE2quick$ 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. 1.COMPREPLY :数组保存按 [TAB][TAB] 后显示的完成结果
  2. 2.COMP_WORDS :在命令行上键入的单词数组
  3. 3.COMP_CWORD :COMP_WORDS 数组的索引,并且可以在命令行上使用此不同位置的单词进行访问。
  4. 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


Tags:Linux   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Linux获取Redis 性能指标方法
一、监控指标&Oslash; 性能指标:Performance&Oslash; 内存指标: Memory&Oslash; 基本活动指标:Basic activity&Oslash; 持久性指标: Persistence&Oslash; 错误指标:Error二、监...【详细内容】
2024-04-11  Search: Linux  点击:(3)  评论:(0)  加入收藏
微软 Win11 Linux 子系统(WSL)发布 2.2.2 版本
IT之家 4 月 8 日消息,微软近日更新 Windows Subsystem for Linux(WSL),最新 2.2.2 版本中带来了诸多改进,重点更新了 nft 规则,可以让 IPv6 流量通过 Linux 容器。图源: dev.to,AI...【详细内容】
2024-04-08  Search: Linux  点击:(6)  评论:(0)  加入收藏
从原理到实践:深入探索Linux安全机制
Linux 是一种开源的类Unix操作系统内核,由Linus Torvalds在1991年首次发布,其后又衍生出许多不同的发行版(如Ubuntu、Debian、CentOS等)。前言本文将从用户和权限管理、文件系统...【详细内容】
2024-03-27  Search: Linux  点击:(16)  评论:(0)  加入收藏
在Linux系统中,如何处理内存管理和优化的问题?
本文对 Linux 内存管理和优化的一些高级技巧的详细介绍,通过高级的内存管理技巧,可以帮助系统管理员和开发人员更好地优化 Linux 系统的内存使用情况,提高系统性能和稳定性。在...【详细内容】
2024-03-26  Search: Linux  点击:(10)  评论:(0)  加入收藏
Linux 6.9-rc1 内核发布:AMD P-State 首选核心、BH 工作队列
IT之家 3 月 25 日消息,Linus Torvalds 宣布,Linux 6.9 内核的首个 RC(候选发布)版 Linux 6.9-rc1 发布。▲ Linux 6.9-rc1Linus 表示,Linux 内核 6.9 看起来是一个“相当正常”...【详细内容】
2024-03-25  Search: Linux  点击:(11)  评论:(0)  加入收藏
Linux发行版 Ubuntu 迎更新 界面设计灵感来自 Windows 11
近日,一位第三方开发者推出了一款名为“Wubuntu”的特殊Linux发行版。这款系统源自主流的Ubuntu版本,但在界面设计上却借鉴了微软最新的Windows 11风格,甚至在其中融入了微软标...【详细内容】
2024-02-27  Search: Linux  点击:(43)  评论:(0)  加入收藏
Win + Ubuntu 缝合怪:第三方开发者推出“Wubuntu”Linux 发行版
IT之家 2 月 26 日消息,一位第三方开发者推出了一款名为“Wubuntu”的缝合怪 Linux 发行版,系统本身基于 Ubuntu,但界面为微软 Windows 11 风格,甚至存在微软 Windows 徽标。据...【详细内容】
2024-02-27  Search: Linux  点击:(50)  评论:(0)  加入收藏
Linux中磁盘和文件系统工作原理解析
在Linux系统中,一切皆文件的概念意味着所有的资源,包括普通文件、目录以及设备文件等,都以文件的形式存在。这种统一的文件系统管理方式使得Linux系统具有高度的灵活性和可扩展...【详细内容】
2024-02-20  Search: Linux  点击:(53)  评论:(0)  加入收藏
Linux子系统概览
inux操作系统是一个模块化的系统,由多个子系统组成。这些子系统协同工作,使Linux能够执行各种任务。了解Linux的子系统有助于更好地理解整个操作系统的运作机制。以下是Linux...【详细内容】
2024-02-01  Search: Linux  点击:(77)  评论:(0)  加入收藏
Linux内核:系统之魂与交互之源
内核,作为任何基于Linux的操作系统的心脏,扮演着至关重要的角色。它不仅是计算机系统软件与硬件之间的桥梁,更是确保系统稳定、高效运行的关键。内核提供了一系列核心功能,为上...【详细内容】
2024-02-01  Search: Linux  点击:(69)  评论:(0)  加入收藏
▌简易百科推荐
微软 Win11 Linux 子系统(WSL)发布 2.2.2 版本
IT之家 4 月 8 日消息,微软近日更新 Windows Subsystem for Linux(WSL),最新 2.2.2 版本中带来了诸多改进,重点更新了 nft 规则,可以让 IPv6 流量通过 Linux 容器。图源: dev.to,AI...【详细内容】
2024-04-08    IT之家  Tags:Linux   点击:(6)  评论:(0)  加入收藏
从原理到实践:深入探索Linux安全机制
Linux 是一种开源的类Unix操作系统内核,由Linus Torvalds在1991年首次发布,其后又衍生出许多不同的发行版(如Ubuntu、Debian、CentOS等)。前言本文将从用户和权限管理、文件系统...【详细内容】
2024-03-27  凡夫编程  微信公众号  Tags:Linux安全   点击:(16)  评论:(0)  加入收藏
在Linux系统中,如何处理内存管理和优化的问题?
本文对 Linux 内存管理和优化的一些高级技巧的详细介绍,通过高级的内存管理技巧,可以帮助系统管理员和开发人员更好地优化 Linux 系统的内存使用情况,提高系统性能和稳定性。在...【详细内容】
2024-03-26  编程技术汇  微信公众号  Tags:Linux   点击:(10)  评论:(0)  加入收藏
Linux 6.9-rc1 内核发布:AMD P-State 首选核心、BH 工作队列
IT之家 3 月 25 日消息,Linus Torvalds 宣布,Linux 6.9 内核的首个 RC(候选发布)版 Linux 6.9-rc1 发布。▲ Linux 6.9-rc1Linus 表示,Linux 内核 6.9 看起来是一个“相当正常”...【详细内容】
2024-03-25    IT之家  Tags:Linux   点击:(11)  评论:(0)  加入收藏
轻松实现Centos系统的软件包安装管理:yum指令实战详解
yum 是一种用于在 CentOS、Red Hat Enterprise Linux (RHEL) 等基于 RPM 的 Linux 发行版上安装、更新和管理软件包的命令行工具。它可以自动解决软件包依赖关系,自动下载并...【详细内容】
2024-02-27  凡夫贬夫  微信公众号  Tags:Centos   点击:(54)  评论:(0)  加入收藏
Win + Ubuntu 缝合怪:第三方开发者推出“Wubuntu”Linux 发行版
IT之家 2 月 26 日消息,一位第三方开发者推出了一款名为“Wubuntu”的缝合怪 Linux 发行版,系统本身基于 Ubuntu,但界面为微软 Windows 11 风格,甚至存在微软 Windows 徽标。据...【详细内容】
2024-02-27    IT之家  Tags:Ubuntu   点击:(50)  评论:(0)  加入收藏
Linux中磁盘和文件系统工作原理解析
在Linux系统中,一切皆文件的概念意味着所有的资源,包括普通文件、目录以及设备文件等,都以文件的形式存在。这种统一的文件系统管理方式使得Linux系统具有高度的灵活性和可扩展...【详细内容】
2024-02-20  王建立    Tags:Linux   点击:(53)  评论:(0)  加入收藏
Linux子系统概览
inux操作系统是一个模块化的系统,由多个子系统组成。这些子系统协同工作,使Linux能够执行各种任务。了解Linux的子系统有助于更好地理解整个操作系统的运作机制。以下是Linux...【详细内容】
2024-02-01    简易百科  Tags:Linux   点击:(77)  评论:(0)  加入收藏
Linux内核:系统之魂与交互之源
内核,作为任何基于Linux的操作系统的心脏,扮演着至关重要的角色。它不仅是计算机系统软件与硬件之间的桥梁,更是确保系统稳定、高效运行的关键。内核提供了一系列核心功能,为上...【详细内容】
2024-02-01  松鼠宝贝    Tags:Linux内核   点击:(69)  评论:(0)  加入收藏
如何确保Linux进程稳定与持久
在Linux系统中,进程的稳定性与持久性对于维持系统的持续运行至关重要。然而,由于各种原因,进程可能会面临崩溃或系统重启的情况。为了确保关键进程能够持续运行,我们必须采取一...【详细内容】
2024-01-19  松鼠宝贝    Tags:Linux进程   点击:(85)  评论:(0)  加入收藏
站内最新
站内热门
站内头条