在 bash 中,环境变量在 echo 命令之后会正确地进行制表符扩展,例如:
echo $HOME
但是在 cd 或 cat 之后,bash 在 $ 符号之前放置一个 \,如下所示:
cd \$HOME
如果我使用变量作为命令的第二个参数,它根本不会扩展:
cp somefile $HOM
我的 .bashrc 或 .inputrc 文件中有什么神秘的选项让我如此痛苦?
在 bash 中,环境变量在 echo 命令之后会正确地进行制表符扩展,例如:
echo $HOME
但是在 cd 或 cat 之后,bash 在 $ 符号之前放置一个 \,如下所示:
cd \$HOME
如果我使用变量作为命令的第二个参数,它根本不会扩展:
cp somefile $HOM
我的 .bashrc 或 .inputrc 文件中有什么神秘的选项让我如此痛苦?
您所描述的是bash 4.2 中引入的“功能” 。所以你没有任何神秘的选择让你感到痛苦,而只是“有意”的行为。
我觉得这很烦人,因为我喜欢它以前的方式并且还没有找到任何配置选项来恢复早期的行为。使用complete
其他答案建议的选项并没有让我到任何地方。
尝试完成 -r cd以删除许多 Linux 发行版为该cd
命令安装的特殊编程完成功能。该函数将搜索 CDPATH 变量中指定的目录列表添加到选项卡完成中cd
,但以破坏默认完成行为为代价。
有关更多详细信息,请参阅http://www.gnu.org/software/bash/manual/bashref.html#Programmable-Completion 。
对于第二种情况,您可以在 tab 之前按 ESC 来解决它。
我不知道您的问题的解决方案,但您可以查看/etc/bash_completion或/etc/bash_completion.d下的文件以确定哪些命令使用自动完成功能以及如何使用。
help complete
也可能会有所帮助。
检查 Dmitry Alexandrov的https://superuser.com/questions/434139/urxvt-tab-expand-environment-variables的答案:
这是关于 direxpand 选项。
$ shopt -s direxpand
并将$FOO_PATH/
由 TAB 扩展。