当前位置: 首页>>技术教程>>正文


如何让bash在tab-completion期间停止逃避$?

, ,

问题描述

我在命令行上有这个:

 ln -sf $PWD/wine-

然后我点击tab来完成文件名。在早期版本的Ubuntu中,这可以很好地完成wine-文件名(并且当时将扩展side-effect $PWD)。但现在它转向了

 ln -sf \$PWD/wine-

这不是我的意思,并没有完成任何事情,因为该文件不是从$开始。

如何将完成恢复到不那么破碎的行为?

set告诉我这些是我目前的设置:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

最佳解决办法

我发现bash versions >= 4.2.29有一个新的direxpand shopt设置。 (如果您查看新的bash,请参阅man docs/bash.1,或参见bash.1 from line 8951)

如果使用Quantal Quetzal 12.10或以其他方式获得(或检查并构建)新的bash,则:

shopt -s direxpand

给我我想要,需要和爱的行为。

解决方法:与此同时,CTRL-ALT-e代替tab也可以实现我想要的功能。但是很尴尬。

顺便说一下,gnu.bash.bug中有几个名为bash tab variable expansion question?的线程。从阅读它们,我在这里找到了信息。

次佳解决办法

在顶级bash_completion脚本中搜索_filedir()并更改该行

compopt -o filenames 2>/dev/null

compopt -o filenames -o noquote 2>/dev/null

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6781.html,未经允许,请勿转载。