执行 'sh script.sh /path/foo.py' 时自动完成不起作用

Autocompletion doesn't work when exectute 'sh script.sh /path/foo.py'

我目前 运行正在 Ubuntu 14.04 LTS 下。

我的问题是,当我 运行 一个带有 sh 命令的脚本需要另一个文件作为参数时,例如:

sh script.sh /path/foo.bar

文件foo.bar没有自动补全功能,需要自己写。仅当扩展名是 .sh 时才有效。否则,如果我使用命令 bash 而不是 sh,自动完成适用于任何文件扩展名。

我尝试在 script.sh 的第一行添加通常的 #!/bin/bash#!/bin/sh,但没有任何变化。

我也重新 link shbash 而不是最初的 dash : ln -s /bin/bash /bin/sh

因此 sh 通常会调用 bash 然后工作相同?但是没有。

我知道我可以简单地使用 bash 作为命令并丢弃 sh,但是......你知道 :-)

==> 因此,如果您有任何想法让 sh 能够自动完成所有文件扩展名`,我将不胜感激!

应该使用哪个完成函数由命令的名称决定:sh而不是由任何东西的 shebang 行或命令的 link 目标决定。

如果您想更改该行为,您需要调整 sh 的完整功能。在 Debian/Ubuntu 它位于 /usr/share/bash-completions/sh

但是,如果您 link 将 sh 编辑为 bash,为什么不直接使用 bash 而不是 sh

如果您出于某种原因想使用 sh 而不是 bash,如果对您来说足够好的话,另一个肮脏的技巧可能是以下。类型:

+sh <tab-complete> <tab-complete>

现在键入 Pos1 并删除前导 +,然后按回车键。