欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


Linux中的ls命令详细使用
百度云管家如何开启“密码锁”功能?
为什么无法卸载百度云Android版?
百度云管家如何开启“短信备份恢复”功能?
百度云管家如何开启“通讯录自动同步”功能?
Linux系统的关机与重启相关命令总结
傲游手机浏览器新增头像随心换功能
详解Linux系统中的守护进程
设置Debian系统的root登陆的方法
Excel的自动输入无法使用
Linux中10个你不知道的命令补齐技巧
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   默认情况下,bash命令行可以自动补全文件或目录名称。不过,我们可以使bash命令行补全执行更多的操作,通过补全命令可以让它成就下一个辉煌。

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

  例如:在输入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补全命令

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

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

  代码如下:

  complete -p | less

  选项 -p 是可选择的。

  2、Bash中标准补全的列表

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

  变量名补全(Variablename completion)

  用户名补全(Username completion)

  主机名补全(Hostname completion)

  Path路径补全(Pathname completion)

  文件名补全(Filename completion)

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

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

  代码如下:

  $ 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、为获得后台作业名称获得补全命令

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

  代码如下:

  $ 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、具有排除功能的文件名和目录补全

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

  代码如下:

  $ 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变量分割String字符串,得到被分割后的值。

  单词表可以通过使用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执行如下:

  代码如下:

  $ 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、当第一规范没有进行匹配时,就需要执行第二规范

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

  代码如下:

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

  同上,通过使用_count_files 文件中定义的_count_files 函数定义的completion ,如果_count_files函数没有进行匹配,那么就会执行目录补全。

  代码如下:

  $ ls

  countfiles.sh dir1/ dir2/ dir3/

  $./countfiles.sh [TAB][TAB]

  dir1 dir2 dir3

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站