如何使bash在制表符完成期间停止转义$?


38

我在命令行上有这个:

ln -sf $PWD/wine-

然后点击Tab以完成文件名。在Ubuntu的早期版本中,此功能可以很好地完成wine-文件名(并且副作用$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

2
如果您是此问题的影响,请考虑以下URL下投票(需要登录):bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/...
cripton

Answers:


36

我发现bash版本> = 4.2.29具有新的小direxpand商店设置。(查看man docs/bash.1是否签出了新的bash,或者从8951行中看到bash.1

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

shopt -s direxpand

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

解决方法:在此期间,Ctrl+ Alt+ E,而不是Tab我想要做什么了。但是很尴尬。

顺便说一句,有几个线程称为“ bash选项卡变量扩展问题?” 在gnu.bash.bug中。通过阅读它们,我在这里找到了信息。


2
带有direxpand的bash版本正在进入精确(12.04):请参见bugs.launchpad.net/bugs/778627
keturn 2013年

7
如果我不扩大自己的庞大路径,并且可以在完成时继续使用未转义的变量,那就更好了。
jozxyqk 2014年

@jozxyqk您是否找到了获取该无路径扩展功能的方法?
Ungeheuer

@Ungeheuer我目前4.4.19在Ubuntu 18.04上使用bash ,它可以正常工作。不知道什么时候改变了。
jozxyqk

2

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

compopt -o filenames 2>/dev/null

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

在12.04 GNU bash版本4.2.25中,此建议给出了错误:compopt: noquote: invalid option name
arielf 2015年

1

对于使用12.04的用户(例如我),可以使用〜+代替$ PWD ...

例如 :

cd /bin
echo ~+/ls
/bin/ls

1

即使更新了bash,我$仍然发现自己仍然可以逃脱。

  • 取出bash-completion (1:2.1-3.fc20)包装
  • 或根本不/etc/bashrc从供应商那里~/.bashrc解决问题。

我怀疑我现在会缺少一些我通常习惯的功能,但是还没有注意到。


替代(至少对于Fedora 26),export BASH_COMPLETION_VERSINFO=0在采购之前添加/etc/bashrc。这使有问题的脚本认为其脚本已经被获取。




0
shopt -u progcomp

这为我修复了该问题,它还删除了许多“智能”完成选项,这些选项由于不完成我所知道的文件而受到阻碍,因为愚蠢的事情认为我不希望它们作为特定参数的参数命令。阿格

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.