图片 1

2. 列出 bash 中标准补全成效

暗许意况下,Bash 为 Linux 客户提供了下列标准补全效率。

  1. 变量补全
  2. 顾客名补全
  3. 主机名补全
  4. 途径补全
  5. 文本名补全

我们在头里的  bash
规范补全中切磋过那些。

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

这么些科目表达了大家是何许利用可编制程序的指令行补专职能(programmable
completion)把自动补全效率利用于选用可能命令行参数。

1. 翻看已部分命令行补全

在启用可编制程序的通令行补全职能后,就曾经有了生龙活虎部分定义好的授命补全功用。complete
命令用于定义命令行补全。

要翻开本来就有的命令行补全,如下使用 complete 命令:

complete -p | less

地点例子中的 -p 选项是可选的。

在 Linux 系统中,当您输入一个指令,再按三遍 TAB
键,就能够列出具备以你输入字符初始的可用命令。那并不优质,恐怕你早就了解了。这么些效能被称作命令行补全bash
completion。默许意况下,bash
命令行能够活动补全文件或目录名称。可是,大家得以升高 bash
命令补全成效,通过 complete 命令让它到达新的莫斯中国科学技术大学学。

生机勃勃经您从未意识那些代码,也从没找到/etc/bash_completion文件,那么您只需求通过使用apt-get命令来安装bash_completion
包即可。

图片 1

在底下的例子中,可感到 telnet 命令突显可用的主机名:

比方说:在输入 write 命令之后,倘令你按四遍 TAB
按钮,自动补全功效会提供可供奉行 write 操作的客商列表。

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

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<"

3. 定义多少个指令名补全

透过 -c
选项能够将有所的可用命令作为一个指令的补全参数。在下面包车型大巴例证里面,为
which 命令定义了三个补全(LCTT译注:在按两下 TAB
时,可以列出全体命令名作为可补全的参数)。

$ complete -c which

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

如上,要是按下 ‘y’,就能够列出装有的授命名。

9. 写个函数来生成补全

你能够引进叁个函数来定义补全。使用 -F 选项将函数名传给 complete
命令,试行函数生成补全内容。举个例子,函数如下:

_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 后出示的结果
  2. COMP_WO牧马人DS : 该数组满含命令行输入的单词
  3. COMP_CWORD : COMP_WOXC90DS
    数组的目录,使用它来分别命令行可以访谈的单词地方
  4. compgen : -W 基于 $current_arg 提供恐怕的补全及其参数

该函数放在 parser_option 文件中,并透过 source 命令引进:

$ source parser_option

将该函数和您的 parser.pl 脚本关联起来:

$ complete -F _parser_options ./parser.pl

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

如上,parser.pl 的挑肥拣瘦是由函数 _parser_options() 生成的。

提示: 查看/etc/bash_completion 来询问更加多的可编制程序补全函数。

### 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

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
后台任务中的例子精晓什么处理后台任务。

7. 暗含毁灭的文件名和目录名补全

设若脚本运维达成后,输出目录如下:

$ cd output/

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

如上,借令你想要 ls 命令的补全忽视 .tmp 和 .o 文件:

$ 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 是二个情况变量,它蕴含了全自动补全所急需破除的文书名后缀。

4. 概念一个目录补全

透过接收 -d,能够定义叁个仅富含目录名的补全参数。在上面包车型地铁例子中,为
ls 命令定义了补全。

$ ls
countfiles.sh  dir1/          dir2/          dir3/

$ complete -d ls

$ ls [TAB][TAB]
dir1/          dir2/          dir3/

如上,连按下 TAB 仅会彰显目录名。

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

要让可编制程序命令补全功用在您的尖峰起效果
,你只必要如下奉行/etc/bash_completion即可:

您也能够撤废/etc/bash.bashrc(来自 Ubuntu Linux 13.04
系统)中如下的讲授,那样,你就足以无需实践上边的下令了:

10. 当第一个法则未有调换结果时,就动用第叁个

假如定义的补全法则未有生成相配时,能够行使 -o 选项生成补全。

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

如上,为 ./countfiles.sh 定义了 _count_files 补全函数。 假若 the
_count_files(卡塔尔(قطر‎ 函数没有变化任何相配的话,就能触发目录补全。

$ ls 
countfiles.sh    dir1/      dir2/      dir3/

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

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注