即使路径中使用了 shell 变量,如何使用 Tab 扩展文件名?

即使路径中使用了 shell 变量,如何使用 Tab 扩展文件名?

在我的文件中.bash_profile,我设置了短变量来简化对一些常见目录的访问。例如:

lh=/var/log/httpd
hc=/etc/httpd/conf

所以我像这样使用它:

$ cd $lh
$ less $lh/access_log

但是,当我想使用 Tab 键来自动完成文件名时(在包含变量引用的参数中),bash 会执行自动完成,但还会\在变量名称的美元符号之前插入反斜杠。

例如,键入less $lh/acc 然后按 Tab 键将扩展为:less \$lh/access_log

当然,我想要的是less $lh/access_log 或者less /var/log/httpd/access_log。 (奇怪的是,cd在这种情况下,使用命令自动完成根本不起作用,这个问题已经讨论过了)

我知道可以使用shell-expand-line(default key: Ctrl+ Alt+ E) 来替代,但它远非完美,因为它也扩展了别名,并且它不引用带有特殊字符(空格,...)的路径。

bash 有没有办法用 Tab 扩展文件名,即使路径中使用了 shell 变量?

答案1

问题是direxpand未设置 shell 选项。以下解决了该问题:

shopt -s direxpand

相关内容