![非邻近目录的 Bash 自动完成](https://linux22.com/image/914387/%E9%9D%9E%E9%82%BB%E8%BF%91%E7%9B%AE%E5%BD%95%E7%9A%84%20Bash%20%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90.png)
我最近编写了一个程序,如果目录相对于给定的基线具有唯一名称,则可以立即切换到该目录。例如,如果我有一个目录:
~/Documents/foo
并且 foo 是 下所有目录中唯一的结束名称~/Documents/
,那么使用命令“foo”运行程序将立即将我当前的工作目录更改为, ~/Documents/foo
无论我当前在目录树中的什么位置。
由于这些目录(如上例中的“foo”)具有唯一名称,因此我希望它将其识别为唯一名称并自动完成。例如,如果 foo 是~/Documents
其下唯一以“f”开头的目录,我希望:
program_name f [TAB]
自动完成:
program_name foo
问题是,考虑到程序的整个用途,foo 通常不是我当前工作目录的相邻目录。通常,当使用常规功能时cd
,终端会自动完成目录,因为您会沿着树按顺序输入每个目录。
是否可以以某种方式将这些唯一的目录名称添加到自动完成功能中?如果可能的话,我希望它能够识别唯一的文件夹名称,而无需手动将每个文件夹名称添加到某个文件中。我的程序也有不同的级别(例如,它实际上最多可以接受三个参数,并且只要第三个文件夹名称相对于从第二个开始的树是唯一的,第二个相对于第一个是唯一的,第一个相对于某个常量基线是唯一的~/Documents
,那么它会将我当前的工作目录更改为最后一个给定的参数),因此,如果能给出一个可靠的答案,我将非常感激,看看我如何才能尽可能地从终端中挤出最多的自动完成功能。
另外,我还是有点初学者,所以尽量像我五岁的时候那样说:)
先感谢您