Linux 自动完成不需要';执行时不工作';sh script.sh/path/foo.py';

Linux 自动完成不需要';执行时不工作';sh script.sh/path/foo.py';,linux,bash,shell,autocomplete,Linux,Bash,Shell,Autocomplete,我目前在Ubuntu 14.04 LTS下运行 我的问题是,当我使用sh命令运行脚本时,需要另一个文件作为参数,如: sh script.sh /path/foo.bar 自动完成对文件foo.bar不起作用,我需要自己编写。仅当扩展名为.sh时,它才起作用。否则,如果我使用命令bash而不是sh,则自动完成功能适用于任何文件扩展名 我试着在script.sh的第一行添加通常的#/bin/bash或#/bin/sh,但没有任何更改 我还将sh重新链接到bash,而不是初始的dash:ln-s/

我目前在Ubuntu 14.04 LTS下运行

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

sh script.sh /path/foo.bar
自动完成对文件
foo.bar
不起作用,我需要自己编写。仅当扩展名为
.sh
时,它才起作用。否则,如果我使用命令
bash
而不是
sh
,则自动完成功能适用于任何文件扩展名

我试着在
script.sh的第一行添加通常的
#/bin/bash
#/bin/sh
,但没有任何更改

我还将
sh
重新链接到
bash
,而不是初始的
dash
ln-s/bin/bash/bin/sh

因此,
sh
通常会调用
bash
,然后以相同的方式工作?但是没有

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


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

应该使用哪个完成函数取决于命令的名称:
sh
而不是任何东西的shebang行或命令的链接目标

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

但是,如果您将
sh
链接到
bash
,为什么不直接使用
bash
而不是
sh

如果你出于任何原因想使用
sh
而不是
bash
另一个肮脏的把戏可能是下面的,如果它对你来说足够好的话。类型:

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

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

这不是真正的编程问题;也许你可以试着问一下。我放弃了自动完成,所以现在我只使用
bash
。但无论如何,谢谢你的肮脏把戏;-)