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

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

有没有办法让 bash 准确地知道双击标签时要显示的内容?例如,我有一个 python 脚本scpy,它需要几个参数。例如apt-get,如果您双击会给您

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

有没有办法为您自己的脚本/程序做到这一点?我需要将 python 脚本包装在 bash 脚本中吗?

答案1

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

bash 完成的更详细描述可以在“可编程完成”部分中找到man bash(您可以键入“/可编程完成”,然后按几次“n”以快速到达那里。或者,如果您运气好,“g”第2140章 回来

答案2

这是基本指南。

admin.sh让我们看一个您希望自动完成功能被调用的脚本示例。

#!/usr/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

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

这里有autocomplete.sh脚本:

#!/usr/bin/bash

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

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

complete -o nospace -F _script /path/to/your/admin.sh

请注意,要完成的最后一个参数是要添加自动完成功能的脚本的名称。您需要做的就是将自动完成脚本添加到~/.bashrc/etc/bash_completion.d添加为:

source /full-path/to/your/autocomplete.sh

# or

. /full-path/to/your/autocomplete.sh

最后,使它们可执行:

chmod a+x admin.sh autocomplete.sh

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

相关内容