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

Chr*_*ier 12 bash autocomplete spaces

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

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

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

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

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

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

jta*_*lor 6

由C4H5As提到的scp的bash完成中保留增加的空间的特征不是&符号,这只是"替换为匹配"的语法.

您必须更改IFS,因此compgen不会在空格上分割输入,而是在换行符或制表符上:

local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "$options" -- $cur) )
Run Code Online (Sandbox Code Playgroud)


Ben*_* W. 5

您可以通过删除带有相应选项的空格来完成,然后手动将它们添加回您想要的选项,所有这些都使用简单的-W(“wordlist”)完成:

complete -o nospace -W 'Dproperty= "option1 " "option2 "' javaProgram
Run Code Online (Sandbox Code Playgroud)

自动完成现在将在option1和之后插入一个空格option2,但在之后不插入空格Dproperty=


Pau*_*ce. 1

查看您目前拥有的代码将会很有帮助。

但是,如果有的话,请查看scpin的完成代码。/etc/bash_completion.d/ssh它在本地文件名后面放置空格,但不在主机名后面放置空格。