Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 652
sholte Avatar asked Jun 20 '11 22:06

sholte


People also ask

How do you expand a variable in bash?

Parameter expansion comes in many forms in bash, the simplest is just a dollar sign followed by a name, eg $a. This form merely substitutes the value of the variable in place of the parameter expansion expression. The variable name can also optionally be surround by braces, eg ${a}.

What is $$ variable in bash?

$$ is a Bash internal variable that contains the Process ID (PID) of the shell running your script. Sometimes the $$ variable gets confused with the variable $BASHPID that contains the PID of the current Bash shell.


2 Answers

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

like image 86
sehe Avatar answered Oct 15 '22 07:10

sehe


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.

like image 34
Kleag Avatar answered Oct 15 '22 05:10

Kleag