相关疑难解决方法(0)

在某些Bash自动填充选项的末尾添加空格,但不向其他选项添加空格?

我正在尝试为Java程序创建一个Bash完成脚本.该程序的典型调用可能如下所示:

$ javaProgram -Dproperty=foo option1 option2
Run Code Online (Sandbox Code Playgroud)

我的部分脚本将建议可用于此程序的各种Java属性(即,当用户键入时-D,脚本会建议,例如property=,允许用户然后键入值).

我希望完成后不要在等号后插入空格.但是,当用户键入程序的各种选项时(option1以及option2上例中),我希望脚本完成,并在完成时插入一个空格.

我是Bash完成脚本的新手,但我知道shell内置的nospace选项complete.但它似乎不适用于compgen内置,这似乎是我想要的.我已经尝试过使用nospace,然后在相应选项的末尾显式包含空格,但它们似乎并没有完成.

有没有人知道如何在某些选项的末尾获得空格,但在其他选项的末尾没有空格?

bash autocomplete spaces

12
推荐指数
3
解决办法
2492
查看次数

带有等号的完整命令选项

我想写一击完成脚本,可以采取的形式长选项命令--option--param=value.如果用户已在命令行中输入了一个选项,则应从完成列表中排除该选项(假设在命令行上指定给定选项一次才有意义).

这是第一次尝试:

_myprog()
{
    local cur="${COMP_WORDS[$COMP_CWORD]}"

    local words=(--help --param1= --param-state --param2=)
    _exclude_cmd_line_opts
    COMPREPLY=( $(compgen -W "${words[*]}" -- "$cur") )
}
complete -F _myprog myprog

_exclude_cmd_line_opts() {
    local len=$(($COMP_CWORD - 1))
    local i
    for i in "${COMP_WORDS[@]:1:$len}" ; do
         [[ $i == --* ]] && words=( "${words[@]/$i}" )
    done
}
Run Code Online (Sandbox Code Playgroud)

如果源这个脚本source script.sh然后写:

$ myprog --param1= <tab><tab>
Run Code Online (Sandbox Code Playgroud)

我得到以下完成列表:

=              --help         --param2=      --param-state
Run Code Online (Sandbox Code Playgroud)

所以它的工作几乎除了我'='在完成列表中得到一个虚假的标志..任何建议?

bash

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

标签 统计

bash ×2

autocomplete ×1

spaces ×1