bash:变量名未通过Tab完成展开


2

在具有bash版本“3.2.51(1)-release”(操作系统: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

然后在“P”的末尾点击“Tab”,bash会完成它$OLDPWD。这也不会发生在SLES 11 bash中。

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


Alt + $有用吗?
娴静

可能旧的bash版本没有包含所有花哨的完成功能。你可以bash-completion在远程机器上安装包吗?
格伦杰克曼2013年

@glennjackman:该bash-completion包提供了一组围绕许多命令的包装器,这些命令可以自定义这些命令的参数完成行为。它不会影响环境变量的完成。该功能内置于更高版本的bash中。
garyjohn 2013年

2
是否已设置$ OLDPWD?在我的bash 4.2.25中,直到你cd至少使用过一次才定义它。我不知道当你做cd时bash 3.x是否设置了$ OLDPWD。例如,$ HOM <tab>的完成是否完成到$ HOME?
游荡逻辑

顺便说一句,我刚刚在csh中找到,如果我设置set zzz='~/some/dir',我不能做tab扩展,cp $zzz +tab但如果我定义set zzz=~/some/dir,我可以做扩展。看起来shell在引号中的字符串后无法展开。
Chan Kim

Answers:


4

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

我发现这bash-completion真的搞得一团糟。我总是卸载bash-completion或运行complete -r以确保单个完成规则没有对默认的完成执行愚蠢的操作。

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


我们如何在csh中做到这一点?我看到'shopt:命令未找到。'。
Chan Kim


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.