我正在尝试为我编写的实用程序脚本设置 bash 完成,因此我将以下脚本添加到 /etc/bash_completion.d:
_mcd()
{
local cur words
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
words=`mcd-completion-words`
COMPREPLY=( $(compgen -W "${words}" -- "$cur") )
return 0
}
complete -F _mcd mcd
该mcd-completion-words
脚本以编程方式查找命令的可用运算符。当我重新启动 bash(或获取脚本)时,我可以成功完成制表符,但如果这样做,我将无法再退格超过已完成的字符。
此外,如果我尝试列出所有选项(例如,我尝试在没有任何单词的情况下完成制表符),bash 会在命令中添加一个制表符,我也无法退格。
如何使 bash 模仿正常的文件完成行为?任何帮助表示赞赏。谢谢!
这是 mcd-completion-words 的简化测试用例,它仍然表现出相同的行为。奇怪的是,丹尼斯的案例也适用于我(例如,当用 words="one two three" 代替时)。
#!/usr/bin/env php
<?php
print "one two three four five six seven eight nine";