bash completion now quotes shell variable references rather than expanding them
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
bash (Debian) |
Fix Released
|
Unknown
|
|||
bash (Fedora) |
New
|
Undecided
|
Unassigned | ||
bash (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Precise |
Fix Released
|
Undecided
|
Unassigned | ||
Quantal |
Fix Released
|
Undecided
|
Unassigned | ||
Raring |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Binary package hint: bash
NB! NB! NB!
After applying the update to resolve this problem one _also_ must enable direxpand option by issuing:
shopt -s direxpand
If you do not do this, the variable expansion will not happen.
NB! NB! NB!
[Impact]
Bash-4.2 tries to leave completed directory names as the user typed them,
without expanding them to a full pathname. One effect of this is that
shell variables used in pathnames being completed (e.g., $HOME) are left
unchanged, but the `$' is quoted by readline because it is a special
character to the shell.
[Test Case]
- [Current test case showing expected behavior]
Items to address so far:
- that $ is escaped less
- that direxpand does not expand as expected
- that direxpand option is available and if enabled, expands directories with variable names.
zef:~/Projects/
zef:~/Projects/
zef:/tmp/testd$ td=`pwd`
zef:/tmp/testd$ cd ../
zef:/tmp$ ls \$td/finger
zef:/tmp$ shopt -s direxpand
zef:/tmp$ ls $td/fing<TAB>
zef:/tmp$ ls /tmp/testd/finger/
toe
- [Previous Test Case showing non-working bash installation]
~$ mkdir -p /tmp/testd/
/tmp$ cd /tmp/testd
/tmp/testd$ td=`pwd`
/tmp/testd$ cd ../
/tmp$ ls $td/fing
Type a TAB character at this point, and bash completion makes the line:
/tmp$ ls \$td/finger
Note that while 'fing' has been expanded to 'finger ' (with a space at the end), the $td variable reference has had the
$ character quoted with a backslash. This prevents further extension of the pathname, and in fact makes
the command invalid; if I type a newline at this point, I get:
ls: cannot access $td/finger: No such file or directory
This is not useful behavior. I believe that in Ubuntu 10.10, the $td variable would have been expanded
to '/tmp/testd', and subsequent completions starting from '/tmp/testd/finger' would have worked.
[The version of /etc/bash_
# _filedir : to handle file and directories with spaces in their names.
if ! type _filedir &> /dev/null ; then
so I don't think that file is overriding /etc/bash_
[Regression Potential]
- (#32) low potential for regressions since this bug is related to the interactive command line and would not influence any scripts.
ProblemType: Bug
DistroRelease: Ubuntu 11.04
Package: bash 4.2-0ubuntu3
ProcVersionSign
Uname: Linux 2.6.38-8-generic x86_64
Architecture: amd64
Date: Fri May 6 09:48:29 2011
InstallationMedia: Ubuntu 9.10 "Karmic Koala" - Release amd64 (20091027)
ProcEnviron:
SHELL=/bin/bash
PATH=(custom, user)
LANG=en_US.UTF-8
LANGUAGE=en_US:en
SourcePackage: bash
UpgradeStatus: Upgraded to natty on 2011-04-30 (6 days ago)
Related branches
Changed in bash (Ubuntu): | |
status: | New → Confirmed |
Changed in bash (Debian): | |
status: | Unknown → New |
Changed in bash (Debian): | |
status: | New → Fix Released |
description: | updated |
description: | updated |
summary: |
- In natty, bash completion now quotes shell variable references rather - than expanding them + bash completion now quotes shell variable references rather than + expanding them |
tags: | removed: natty |
Fixed by editing line 1587 of /etc/bash_ completion (see https:/ /bugs.launchpad .net/ubuntu/ +source/ bash/+bug/ 769866/ comments/ 10)