bash tab 补全在 shell 脚本上不起作用

bash tab 补全在 shell 脚本上不起作用

sh在我的 Fedora 19 系统上,当我在命令行开头有一个时,tab 补全对 bash 脚本不起作用,除非脚本文件名以 结尾.sh

也就是说,如果我输入:

$ sh file<tab>

当前目录包含:

filename

...Tab 键补全不起作用。

但如果当前目录包含:

filename.sh

竣工工程。

完成对其他所有事情都有效,因此我怀疑有一个以 开头的命令的自定义完成器sh,它正在寻找以 结尾的文件.sh

有没有简单的方法可以修复此问题?我想为我的用户修复此问题,而不是为所有用户修复,因为我不想修改操作系统。

答案1

自定义完成的最基本命令bash是:

  • .sh在之后完成文件(G 代表通配符):

    complete -G '*.sh' sh
    

    这可能位于您的(系统范围)配置中的某个位置。(您可以使用complete -pr它来检查打印所有定义)

  • 去完成任何sh刚刚发出后的文件名

    complete -A file sh
    

    -A需要更多可能行动(这里:文件),请查看complete内置的描述man bashbuiltins以了解更多选项。

为了永久修复该行为,请将最后一个命令也放入您的~/.bashrc

答案2

不,应该有任何自定义的东西。在任何 Linux 版本上都没有看到过类似的东西。制表符补全按预期工作。

顺便问一下,重点是什么

$ sh filename<tab>

如果你的目录中有“文件名”,那怎么办呢?

您可能有点困惑,好像目录中有两个相似的文件名,补全只会持续到字符相同,然后才会显示所有可用选项。

相关内容