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,然后在相应选项的末尾显式包含空格,但它们似乎并没有完成.
有没有人知道如何在某些选项的末尾获得空格,但在其他选项的末尾没有空格?
由C4H5As提到的scp的bash完成中保留增加的空间的特征不是&符号,这只是"替换为匹配"的语法.
您必须更改IFS,因此compgen不会在空格上分割输入,而是在换行符或制表符上:
local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "$options" -- $cur) )
Run Code Online (Sandbox Code Playgroud)
您可以通过删除带有相应选项的空格来完成,然后手动将它们添加回您想要的选项,所有这些都使用简单的-W(“wordlist”)完成:
complete -o nospace -W 'Dproperty= "option1 " "option2 "' javaProgram
Run Code Online (Sandbox Code Playgroud)
自动完成现在将在option1和之后插入一个空格option2,但在之后不插入空格Dproperty=。
查看您目前拥有的代码将会很有帮助。
但是,如果有的话,请查看scpin的完成代码。/etc/bash_completion.d/ssh它在本地文件名后面放置空格,但不在主机名后面放置空格。
| 归档时间: |
|
| 查看次数: |
2492 次 |
| 最近记录: |