当我实现bash自动完成功能时,有些东西让我感到困惑,我将它放在/etc/bash_completion.d/中
为了实现某些功能,我想:从变量中删除单词break字符冒号()$COMP_WORDBREAKS并/在开头添加斜杠()$COMP_WORDBREAKS.
COMP_WORDBREAKS=" /'><=;|&("
_mytool()
{
local cur=${COMP_WORDS[COMP_CWORD]}
compopt -o nospace
# my implement here
COMPREPLY=( $(compgen ..........my_implement......... -- $cur) )
}
complete -F _mytool mytool
Run Code Online (Sandbox Code Playgroud)
但是,我无法COMP_WORDBREAKS直接重置,因为该值与其他完成脚本共享.调用完成函数时,COMP_WORDS已经填充了变量数组,因此本地更改COMP_WORDBREAKS不起作用.
是否有任何解决方案可以更改COMP_WORDBREAKS一个完成脚本而对其他脚本没有影响?
$ echo $BASH_VERSION
4.2.10(1)-release
Run Code Online (Sandbox Code Playgroud) 我最近从 Scientific Linux 6 迁移到 CentOS 7,并且在新操作系统中遇到了 bash 选项卡完成问题。
软件版本
$ cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
$ uname -r
3.10.0-229.14.1.el7.x86_64
$ bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud)
我有一个 bash 脚本(可执行文件)./run_prog.sh,它使用 -c 选项(或 long --config=)在命令行上获取配置文件。
完整命令示例:
./run_prog.sh -c=./config/test-new-feature.conf
## or
./run_prog.sh --config=./config/test-new-feature.conf
Run Code Online (Sandbox Code Playgroud)
在以前版本的 bash 中,我能够在 -c= 构造之后使用 tab 完成目录和文件名。
预期选项卡完成示例(它在 SL6 中的工作方式):
./run_prog.sh -c=./conf[TAB]
## completes to
./run_prog.sh -c=./config/
## then type
./run_prog.sh -c=./config/test-n[TAB]
## completes to
./run_prog.sh -c=./config/test-new-feature.conf
Run Code Online (Sandbox Code Playgroud)
CentOS 7 中的新版 bash 将不会在 -c= short …