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

Fal*_*rri 35 bash autocomplete

有没有办法让 bash 确切地知道当你双击时要显示什么?例如,我有一个scpy需要几个参数的 python 脚本。例如apt-get,如果你双标签给你

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

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

Ste*_*n D 38

最简单的方法是在/etc/bash_completion.d/. 这个文件的基本结构是一个简单的函数,它执行完成,然后调用complete它是一个内置的 bash。与其详细介绍如何使用complete,我建议您阅读An Introduction to Bash Completion。第 1 部分介绍基础知识,第 2 部分介绍如何编写完成脚本。

bash 完成的更详细描述可以在“可编程完成”部分找到man bash(你可以输入“/Programmable Completion”,然后按 'n' 几次以快速到达那里。或者,如果你感觉好运,“g 2140 返回”)。

  • [第 1 部分存档(2019 年起)](https://web.archive.org/web/20190328055722/https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1) [第 2 部分 (2014)](https ://web.archive.org/web/20140405211529/http://www.debian-administration.org/article/317/An_introduction_to_bash_completion_part_2) (3认同)
  • 这看起来很有希望,但链接已失效。 (2认同)

Edu*_*omo 13

这是基本指南。

让我们有一个名为 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
Run Code Online (Sandbox Code Playgroud)

注意选项入围名单。使用此选项调用脚本将打印出此脚本的所有可能选项。

在这里你有自动完成脚本:

_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
Run Code Online (Sandbox Code Playgroud)

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

source /path/to/your/autocomplete.sh
Run Code Online (Sandbox Code Playgroud)

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

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

  • “完整教程”不是我用来描述这个的短语...... (3认同)