bash:变量名称未通过 Tab 补全进行扩展

bash:变量名称未通过 Tab 补全进行扩展

在具有 bash 版本“3.2.51(1)-release” (OS: SUSE Linux Enterprise Server 11.1 (x86_64)) 的远程计算机上,我无法使用变量名进行通常的制表符补全。例如,我想输入:

echo $OLDPWD/

然后在斜线末尾,我可以按“Tab”,变量名将扩展为旧目录名(在最后一个cdpushd命令之前)。这在我自己的笔记本电脑(Debian 7,Bash 4.2.37(1)-release)上有效。为什么在这个 SLES bash shell 中它不起作用?

同样地,如果我输入

echo $OLDP

然后按下“Tab”键,bash 会将其补全为$OLDPWD。这在 SLES 11 bash 中也不会发生。

哪些控制变量(shopt?set?)会影响这种行为?

答案1

shopt -s direxpandecho $HOME/<tab>在 bash 4.2 中将扩展为。echo /home/matt/在 bash 4.1 中它应该是默认的。

我发现这bash-completion确实会把事情搞得一团糟。我总是卸载bash-completion或运行complete -r以确保各个完成规则不会对默认完成产生愚蠢的影响。

如果$OLDPWD确实设置了,则应echo $OLDP<tab>扩展为echo $OLDPWD。我不知道什么可以阻止这种情况发生。

答案2

尝试C-x $而不是TAB明确请求可能的变量(而不是其他东西)完成。

答案3

检查答案 urxvt-选项卡扩展环境变量作者:德米特里·亚历山德罗夫。

“这是关于 direxpand 选项。

$ shopt -s direxpand 和 $FOO_PATH/

将通过 TAB 进行扩展”

相关内容