【发布时间】:2019-04-02 14:07:06
【问题描述】:
我尝试使用 bash complete 内置命令来显示命令的不同选项。
当一个选项包含像-F/dev/null的路径时出现问题。
目前我正在使用
#!/bin/bash
_xyz-completion ()
{
local cur
COMPREPLY=() # Array variable storing the possible completions.
cur=${COMP_WORDS[COMP_CWORD]}
case "$cur" in
-*)
COMPREPLY=( $( compgen -W "-oOption1 -F/dev/null" -- $cur ) )
;;
esac
return 0
}
complete -F _xyz-completion -o filenames xyz
如果-F 已经键入,则Tab 会成功完成。
但如果只输入了-,则会显示一个Tab
null -oOption1
但我希望看到
-F/dev/null -oOption1
我已经尝试过-F\/dev\/null、-F//dev//null、"-F/dev/null" 和-F\\\/dev\\\/null
这似乎只是一个显示问题,因为完成本身按预期工作。
我看不出如何适当地转义 `-F/dev/null` 中的斜线。
评论 cmets:
1)
没关系,如果将-F 替换为-Q 等非选项,也会有问题。 – 本杰明 W.
这不是问题,-F 看起来像是 complete 本身的一个选项,因为如果我将其更改为 xOPTION1 xF/dev/null,它甚至会失败
2)
我想知道 compgen -W "-oOption1 -F/dev/null" -- - 为您显示什么。
它显示(如预期)
-oOption1
-F/dev/null
如前所述,-F 成功完成到-F/dev/null
【问题讨论】:
-
我认为斜线不是问题,但
-F是compgen的有效选项。 -
没关系,如果
-F被替换为非选项,例如-Q,也会有问题。 -
我想知道
compgen -W "-oOption1 -F/dev/null" -- -会为您显示什么。 -
@Tanktalus 如果我只是以交互方式测试您的命令,它会显示预期的输出,没有被截断,但是当在问题中使用时,
-F/dev被截断。奇怪。 -
如果您使用
_xyz-completion () { COMPREPLY=(-oOption -F/dev/null); },我可以确认问题仍然存在。
标签: bash autocomplete bash-completion