10种有用的Linux Bash_Completion 命令示例

这篇文章与华为云社区的《有用的LinuxBash_Completion命令示例(Steroids上的Bash命令行补全)》一书共享。

在Linux中,如果用户需要对程序进行修改或升级时,只需再输入两次”TAB”,就能自动生成新的键入字符和可用命令。

这个问题并不新鲜,也许您早就有所了解。不过,如果你的电脑没有安装任何软件的话,bash也是一个不错的选择。在Bash命令下用鼠标点击指定的文件夹或文件名,就能自动恢复该文件夹或文件名中所有的内容。但如果没有这个程序的话,也可以实现类似的功能。在一些情况下,例如当用户需要对某些基本文件进行修改时,如目录名称补全等,bash命令行是必不可少的工具。

但我们可以加速这种bash补全并且用complete命令来把它升级。

在这种情况下,用户只需输入一个简单的指令就能完成所有功能,如:查询、修改文件、显示和打印等,而且还可通过可编程的选项或命令来实现这些功能。

比如当输入write命令时,自动补全若按2次tab将给出用户列表进行write操作。

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

下面的例子会显示可使用telnet命令主机名:

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

为了得到终端上可编程完成的结果,你只要操作/etc-bash-completion就可以了,下面是

你也可以从ubuntulinux13 .04上撤销注释/etc/bash.bashrc的下列行以使你不需要显式地操作以上指令、

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-completions的数据包

启用可编程的bash执行之后定义bash执行集合。当一个对象被启动时,该对象的状态可以是:可执行部分,不可见部分和不可执行部分。在此情况下,可以用命令context来实现上述操作。指令complete是用来定义bash来执行的。

查看当前bash执行情况,可以用下面complete命令。

complete -p | less.

以上例子可选方案-p。

用-c命令的定义结束,得到可利用的命令列表,以此为参数。如果这些被指定的命令与所选择的一个或多个执行环境有关,则将它们添加到相应的操作指令表中。此外还提供了用于确定该命令是否已由用户选定的方法和程序。下面的例子中完成针对哪一条指令来定义、

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

如前所述,所有的指令都会以按下”y”的方式列出。

使用方案d时,可定义完成是只得到目录的名称为参数。如果需要对一个或多个项进行操作,则只需执行其中的一项即可。因此,可根据所选项目来创建新功能和选择相应项以实现指定目的。这种方法很容易理解。下面的例子是ls的定义完、

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

如前所述,根据Tab只显示一个目录。

用完了也能得到作业名称为指令的一个参数。2.用户在输入操作指令时,首先选择一个或多个菜单中的选项,然后再执行相应的操作步骤。3.当选中某个项目后,可直接显示该项目的属性信息和相关内容。选项j是用来把作业名称以参数的形式转移到命令作业中的。下面是

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

说到后台作业你也应该了解怎样利用这些实例来管理Linux的后台作业。

可利用需要增加的必要前缀,以及需要额外实际执行的后缀,定义执行任务。为了使这些前缀或后缀能够被正确地表示出来,必须对其进行分析以确定它们之间是否存在某种关系,并将结果记录在文件里。这种方法称为文件系统分析(FSA)技术。下面的例子是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<“

考虑脚本执行完操作后将输出写到输出目录下

$ 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变量,它含有文件名的后缀,当自动完成时,它们就会被剔除。

可通过-W选项来参考单词列表和IFS变量的数值来拆分单词。当选择了一个或多个词时,将在屏幕上呈现包含所有候选词条的文本集(例如Text Of).通过对这些词赋予不同的权重来确定其重要性。再将每一个结果单词展开,展示成完成、

$ 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.

它可以让你包含函数,并定义执行。用-F选项,将函数名称转移到完成指令中,执行该指令,产生完成。在许多情况下,我们可以不要求用户输入任何代码就能自动创建或修改这些功能。因此,如果需要的话,只需对软件进行简单操作即可实现上述目的。如函数的书写为:

_parser_options(){ local curr_arg; curr_arg=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -W ‘-i –incoming -o –outgoing -m –missed’ — $curr_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,以便观看可编程地执行更多的功能。

在定义完成规范未产生匹配项的情况下,采用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.

原文链接:http://www.sfdkj.com/26280.html

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片