【发布时间】:2014-11-27 03:54:31
【问题描述】:
我不知道我做错了什么。我的 bash_completion 文件设置如下:
_bcd()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "$(back_directory.pl --complete $cur)" -- $cur) )
}
complete -o filenames -o nospace -F _bcd bcd
back_directory.pl 是一个程序,它将返回树上的目录路径:back_directory.pl --complete Th 产生:This\ test/
但是:
22:50:24-Josh@Joshuas-MacBook-Air:~/Desktop/bcd/This test/more white/t$ bcd Th<TAB><TAB>
This test/
如上所示,它不会自动完成包含空格的目录(但它会显示完成选项)。
应该是这样的:bcd This\ test/
我认为-o filenames 应该添加反斜杠来转义空格。感谢您的帮助:)
【问题讨论】:
-
back_directory.pl是否返回多个路径?如果是这样,它如何分隔值? -
@rici 如果可能的话,它将返回多个路径——由空格分隔。但我认为在这种情况下它没有任何区别
-
如果以空格分隔,则不能包含空格。空白是空白。你怎么能分辨出来?但是,如果您使用其他分隔符,您可以在本地设置
IFS以让 compgen 使用它。 (IFS=: compgen ...) -
呵呵……我的错。这样可行!它只是搞砸了格式,以便完成选项从命令行开始。例如。
bcd <tab>'Desktop/ <NEWLINE> Josh/ ...由于某种原因还添加了单引号 -
您是否正在使用包含换行符的路径进行测试?还是 perl 脚本输出换行符(以及)来分隔路径?
标签: linux bash unix completion