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>
如果你的目录中有“文件名”,那怎么办呢?
您可能有点困惑,好像目录中有两个相似的文件名,补全只会持续到字符相同,然后才会显示所有可用选项。