![bash 文件补全而不指定“./”](https://linux22.com/image/183300/bash%20%E6%96%87%E4%BB%B6%E8%A1%A5%E5%85%A8%E8%80%8C%E4%B8%8D%E6%8C%87%E5%AE%9A%E2%80%9C.%2F%E2%80%9D.png)
我使用的是 CentOS 8 的最小安装。
如果我的主文件夹中有一个名为“some_folder”的文件夹,则在命令行上我可以执行以下操作:
some <now hit tab, and bash completion resolves to "some_folder">
但是,如果我的主文件夹中有一个名为“my_file”的文件,则在提示符下,我键入:
my_ <now hit tab, and NOTHING happens, bash completion does not work>
./my_
显然,我必须在点击 tab(!?) 之前返回并输入。你知道如何让 CentOS 以与文件夹相同的方式对文件进行制表符补全吗?
答案1
您当前的目录不在(或不应该)在您的 中$PATH
,因此它不是查找可执行文件的有效位置。在此示例中,my_
是命令的前缀,因此不会在当前目录中找到:
my_<tab>
在本例中,my_
是一个普通文件,可以通过 tab 补全找到:
cat my_<tab>
答案2
如果前面没有命令,my_
那么 shell 将仅使用本地目录的名称或PATH
.默认情况下PATH
,出于最佳实践的原因,当前目录不在目录中。
如果您要这样做,ls my_<TAB>
那么它应该为您完成。
答案3
一种方法是将当前目录添加到配置文件中的 PATH 环境变量中,但这种方式可能很危险,因为您可以在不故意执行脚本的情况下执行脚本(没有 ./):
export PATH="$PATH:."