Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have this on the command line:

 ln -sf $PWD/wine-

and then I hit tab to complete the filename. In earlier versions of Ubuntu, this worked just fine to complete the wine- filename (and as a side-effect $PWD would be expanded at that time). But now it turns it in to

 ln -sf \$PWD/wine-

which isn't what I meant at all and doesn't complete anything as the file does not literally start with $.

How do I get completion back to the less broken behaviour?

set tells me these are my current settings:

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

share|improve this question
1  
If you are affected by this bug please consider voting under the following url (requires login): bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/… –  cripton May 24 '12 at 17:03

3 Answers 3

up vote 11 down vote accepted

I've found that bash versions >= 4.2.29 have a new direxpand shopt setting. (See man docs/bash.1 if you check out a new bash, or see bash.1 from line 8951)

If one uses Quantal Quetzal 12.10 or otherwise gets hold of (or checks out and builds) a new bash, then:

shopt -s direxpand

Gives me the behavior I want, need and love.

Workaround: In the meantime, CTRL-ALT-e instead of tab does what I want too. But is awkward.

BTW, There are several threads called bash tab variable expansion question? in gnu.bash.bug. From reading them, I found the info here.

share|improve this answer
1  
a version of bash with direxpand is making its way into Precise (12.04): See bugs.launchpad.net/bugs/778627 –  keturn Mar 31 '13 at 19:48
    
Would be even better if I didn't have my huge path expanded and could continue using an un-escaped variable with completion. –  jozxyqk Aug 28 at 6:17

For those (like me) with 12.04 can use ~+ instead of $PWD...

for example :

cd /bin
echo ~+/ls
/bin/ls
share|improve this answer

Even with the updated bash, I was finding $ still gets escaped.

  • Removing the bash-completion (1:2.1-3.fc20) package
  • or simply not sourcing /etc/bashrc from ~/.bashrc seemed to fix it.

I suspect I'll now be missing some features I'm normally used to but haven't noticed any yet.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.