有没有办法让 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