![为什么在“source”后输入命令名称时自动补全不起作用](https://linux22.com/image/125496/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E2%80%9Csource%E2%80%9D%E5%90%8E%E8%BE%93%E5%85%A5%E5%91%BD%E4%BB%A4%E5%90%8D%E7%A7%B0%E6%97%B6%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%85%A8%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
source
PATH
默认搜索。
但在 bash 中,在 后键入命令名称时,自动完成功能不起作用source
。
一般来说,什么时候自动完成会根据PATH
工作,什么时候不会?
在输入参数时如何使其工作 source
?
谢谢。
答案1
source
(bash
内置命令)采用文件名争论;仅当未找到指定的文件名时才会触发 PATH 搜索。因此,source foo
首先尝试打开./foo
,只有当失败时,它才会去寻找/path/dir/foo
.尝试使用当前目录中存在的文件名进行制表符补全,或者提供您感兴趣的命令的路径。这些应该按照您的预期进行制表符补全。
实现您想要的最简单的方法是认识到制表符完成正在尝试完整文件名但你想要完整命令。你可以触发完整命令与
M-!
键绑定又名Alt+!. (参见READLINE
章节、Completing
小节、中man bash
和中bash 在线文档对于其他完成功能和默认按键绑定。)困难的方法是修改为
source
第一个参数触发的默认完成函数以调用完整文件名和完整命令功能。请参阅help complete
(在命令行上)Programmable Completion
中man bash
和中的小节bash 在线文档,以及complete
内置命令。
一般来说,制表符补全是位置性的,并根据您在命令行中的位置调用不同的补全函数。在 Arch 系统上,包可以安装一个完成文件,/usr/share/bash-completion
为其可执行文件提供上下文感知的完成。