bash 选项卡完成对 shell 脚本不起作用

vy3*_*y32 0 bash tab-completion

在我的 Fedora 19 系统上,当我sh在命令行的开头有一个时,选项卡完成对 bash 脚本不起作用,除非脚本文件名以.sh.

也就是说,如果我输入:

$ sh file<tab>
Run Code Online (Sandbox Code Playgroud)

当前目录包含:

filename
Run Code Online (Sandbox Code Playgroud)

...标签完成不起作用。

但是如果当前目录包含:

filename.sh
Run Code Online (Sandbox Code Playgroud)

完成工作。

补全适用于其他所有内容,因此我怀疑有一个自定义补全程序用于以 开头的命令,sh它正在寻找以.sh.

有没有简单的方法来解决这个问题?我想为我的用户修复它,而不是为所有用户修复它,因为我不想修改操作系统。

mpy*_*mpy 8

自定义补全的最基本命令bash是:

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

    complete -G '*.sh' sh
    
    Run Code Online (Sandbox Code Playgroud)

    可能这是您(系统范围)配置中的某个地方。(您可以检查complete -prwhich 打印所有定义)

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

    complete -A file sh
    
    Run Code Online (Sandbox Code Playgroud)

    -A采取更多可能的操作(此处:file),请查看complete内置函数的说明以man bashbuiltins获取更多选项。

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