nil*_*hat 28 bash 11.04 environment-variables
bash 自动完成功能似乎不适用于 11.04 中的环境变量。当前行为如下所示
export SCRIPT=/home/user/script
cd $SCRIPT/<tab>
Run Code Online (Sandbox Code Playgroud)
导致在ie 提示变为\之前添加反斜杠 ( )$SCRIPT
cd \$SCRIPT/
Run Code Online (Sandbox Code Playgroud)
如果cd替换为ls或任何其他命令,也会发生同样的事情
另外,如果 $SCRIPT 中包含的路径中有一个可执行文件并且我想运行它
$SCRIPT/<tab>
Run Code Online (Sandbox Code Playgroud)
Bash 不显示文件夹内的选项(无论环境变量中包含的路径内是单个文件还是多个文件/目录)。
换句话说,自动完成功能不适用于环境变量。
gei*_*rha 16
这个错误是在 bash 4.2 中引入的。这里有一个很长的主题:
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html
简而言之,bash 的开发者 Chet Ramey 还不确定如何修复它。
小智 13
要恢复旧的行为,请使用命令
shopt -s direxpand
Run Code Online (Sandbox Code Playgroud)
或将其包含在您的 .bashrc
如果您在不同版本的 bash 中使用相同的 .bashrc,请使用
if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
then shopt -s direxpand
fi
Run Code Online (Sandbox Code Playgroud)
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html 中建议的解决方法是:
<Tab>自动完成您的环境变量 st 您的命令行说cd $MYVAR<Esc>+<Ctrl>-E扩展当前命令行,即替换$MYVAR为其值,路径/然后<Tab>像往常一样享受自动完成这假设您处于 emacs 模式 ( set -o emacs) 并且已经bash_completion为cd(例如complete -o nospace -F _cd cd) 进行了明智的设置。
不幸的是,这在 vi 模式 ( set -o vi)下不起作用,因为那时命令行扩展不可用。