Bash variable expansion on tab complete
I'm running Ubuntu 11.04, and I'm seeing some odd behaviour when I try to use tab-completion in bash on a path that starts with a variable. If I've got TOP=/scratch, and I try to tab-complete:
cd $TOP/foo
it changes to:
cd \$TOP/开发者_运维知识库foo
I'd prefer it to complete to: cd $TOP/foobar or cd /scratch/foobar but I'd settle for it just not changing the line and requiring me to un-escape the $.
Does anyone know where in bash/readline I should look to fix this?
Found the bug report, please register (if not already registered) and add yourself to the 'people affected' list, I just did:
https://bugs.launchpad.net/ubuntu/+source/bash/+bug/778627
Workarounds
Try enabling direxpand
or cdable_vars
:
shopt -s direxpand
# or
shopt -s cdable_vars
Apparently EscTab might be a workaround:
I haven't found a proper solution to this, but there's a workaround. The escaping of environment variables can be disabled by pressing Esc followed by tab.
# cd $SO + [Esc] + [Tab] # cd $SOME_DIR
Confirm that as a bug! I just confirmed that the same thing works on
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.10
Release: 10.10
Codename: maverick
I get broken behaviour on (up-to-date) natty:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 11.04
Release: 11.04
Codename: natty
Although I must add that I do not the slash escaped, but the path (while valid, existing, accessible and readable) is not getting expanded.
Info: https://help.ubuntu.com/community/ReportingBugs
The bug report refered to in other answers at bugs.launchpad.net gives a new workaround by issuing the command:
shopt -s direxpand
It works for me.
I was having a similar problem in cygwin (NT-6.1 2.0.1 2015-04-30) bash (GNU 4.3.33), especially when I would try to tab-expand a path that contained spaces.
I put shopt -s direxpand
in my ~/.bashrc. Problem solved.
精彩评论