针对环境变量的Bash自动完成
bash自动完成function似乎不适用于11.04中的环境变量。 目前的行为如下所示
export SCRIPT=/home/user/script cd $SCRIPT/
导致在$SCRIPT
之前添加\
,即提示变为
cd \$SCRIPT/
如果用ls
或任何其他命令替换cd
也会发生同样的事情
此外,如果$ SCRIPT中包含的路径中有可执行文件,我想运行它
$SCRIPT/
Bash不显示文件夹内的选项(无论环境变量中包含的路径中是否有单个文件或多个文件/目录)。
换句话说,自动完成不适用于环境变量。
这个bug是在bash 4.2中引入的。 这里有一个冗长的主题:
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html
简而言之,bash的开发者Chet Ramey不确定如何修复它。
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html中建议的解决方法是:
- 使用
自动完成环境变量,命令行为cd $MYVAR
-
+
展开当前命令行,即用其值(路径)替换-E $MYVAR
- 添加一个
/
然后像往常一样享受
自动完成
这假设你处于emacs模式( set -o emacs
)并且为cd
设置了明智的bash_completion
(例如complete -o nospace -F _cd cd
)。
不幸的是,这在vi模式( set -o vi
)中不起作用,因为命令行扩展不可用。
要恢复旧的行为,请使用该命令
shopt -s direxpand
或将其包含在.bashrc
如果你使用相同的.bashrc和不同版本的bash,请使用
if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2)) then shopt -s direxpand fi
输入shell变量后
cd $SCRIPT/
键入Cntrl-Alt-E。 这扩展了变量
cd /home/user/script/
这适用于Fedora 16中的EDITOR = vi。