【发布时间】:2014-09-08 18:05:04
【问题描述】:
我正在构建一个源文件,其中包含一些可执行文件的别名(这些文件工作得很好)并将目录分配给变量,以便更快地进入目录,减少输入。例如,如果我获取 example.source:
#!/usr/bin/bash
mydir="/path/to/some/dir"
我可以通过
联系/path/to/some/dir
cd $mydir
但是,我无法像键入完整路径那样使用制表符完成浏览其他子目录。我的意思是,如果我使用 tab 键来完成变量,我会得到 cd $mydir 而不是 cd $mydir/(我必须删除最后一个空格字符并手动输入斜杠 / 才能看到下一个子目录)。希望这是一个可以理解的问题。有什么解决方法吗?
编辑:我使用的 linux 发行版是 Slackware Linux 3.2.31.c x86_64 GenuineIntel GNU/Linux
EDIT2: GNU bash,版本 4.2.37(2)-release
【问题讨论】:
-
我不知道有什么方法可以让制表符完成以知道您希望它这样做,但您可以将尾部斜杠粘贴在变量中并使用
cd ${myd<tab>这将完成到 @987654327 @ 然后您至少可以跳过需要键入斜杠。 (虽然这里的 cd 没有为我完成变量名,所以我不知道发生了什么。) -
好的,谢谢,我可以对系统中的变量进行制表符补全(Linux 3.2.31.c x86_64,Slackware)
-
哦,我可以制表完整变量,只是不能使用
cd。 -
发布
complete -p cd的输出。 -
编写一个使用
complete和compgen(等)的shell函数并将其设置为cd的complete处理程序(使用适当的顶级选项来控制空格等.)。它几乎看起来好像默认的完整选项可以做你想要的,但至少在这里 (bash 3.2.25) 他们没有按照你想要的方式一起工作。您可以尝试使用-o nospace、-o dirnames、-o plusdirs和/或-o bashdefault以及-A variable/-v作为complete ... cd的参数,看看是否可以让它工作。
标签: linux bash variables directory tab-completion