问题描述
我在命令行上有这个:
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