相关疑难解决方法(0)

如何在不影响其他完成脚本的情况下重置COMP_WORDBREAKS?

当我实现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)

bash shell autocomplete bash-completion

22
推荐指数
1
解决办法
3997
查看次数

参数后文件名的 Bash Tab 补全

我最近从 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 …

linux bash autocomplete centos7

5
推荐指数
1
解决办法
2676
查看次数

标签 统计

autocomplete ×2

bash ×2

bash-completion ×1

centos7 ×1

linux ×1

shell ×1