如何为特定命令指定自定义自动完成功能?


25

有没有一种方法可以让bash确切知道在双击选项卡时显示什么?例如,我有一个scpy需要几个参数的python脚本。例如,例如apt-get,如果您双标签给您

autoclean build-dep clean dselect-upgrade清除源升级
自动删除检查dist-upgrade安装删除更新  

有没有办法对自己的脚本/程序执行此操作?我需要将我的python脚本包装在bash脚本中吗?

Answers:


31

最简单的方法是在中包含shell脚本/etc/bash_completion.d/。这个文件的基本结构是一个简单的函数,它执行完成,然后调用complete它是内置的bash。complete建议您不要阅读有关如何使用Bash的详细信息,而不是详细介绍如何使用。第1部分介绍了基础知识,第2部分介绍了如何编写完成脚本。

可以在“可编程完成”部分找到更详细的bash完成描述man bash(您可以键入“ / Programmable Completion”,然后按几次“ n”以快速到达该位置。或者,如果感觉很幸运,请输入“ g 2140 RETURN”)。


8

这是基本指南。

让我们来看一个脚本示例admin.sh,您希望在该脚本上自动完成工作。

#!/bin/bash

while [ $# -gt 0 ]; do
  arg=$1
  case $arg in
    option_1)
     # do_option_1
    ;;
    option_2)
     # do_option_1
    ;;
    shortlist)
      echo option_1 option_2 shortlist
    ;;
    *)
     echo Wrong option
    ;;
  esac
  shift
done

注意选项候选清单。使用此选项调用脚本将打印出该脚本的所有可能选项。

这里有自动完成脚本:

_script()
{
  _script_commands=$(/path/to/your/script.sh shortlist)

  local cur prev
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )

  return 0
}
complete -o nospace -F _script ./admin.sh

请注意,要完成的最后一个参数是要将自动补全添加到的脚本的名称。您需要做的就是将自动完成脚本添加为

source /path/to/your/autocomplete.sh

或将其复制到/etc/bash.completion.d

资料来源:https : //askubuntu.com/a/483149/24155


3
“完整的教程”不是我要用来形容的短语……
searchengine27
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.