选项卡完成对命令不起作用

Scr*_*tch 59 bash auto-completion

我正在尝试对 Ubuntu 11.04 Beta 1 中的命令使用 Tab 补全,运行所有最新更新,但它似乎不起作用。(虽然安装了 bash-completion 包)

选项卡完成仅适用于目录或文件。

任何想法在哪里挖掘?

Ada*_*tek 73

检查您的 .bashrc 中是否有以下片段(默认情况下应该存在)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,包`bash-completion` 是它工作所必需的。奇怪的是,我公司的标准安装没有这个包。 (3认同)

小智 14

我想我还会为 bash 完成失败添加以下附加解释 - 评论太长了,可能对 bash 完成有问题的人有用,因为大概这是“一般”规范问题所有重复项都被引用。

即使你有你合适的线路.bashrc(如在回答以上)和bash-completion安装的软件包,bash补仍可发生故障,如果您有任何shopt -s nullglob或者shopt -s failglob在你.bashrc.bash_aliases

以下场景已通过所有用户自定义.bashrc.bash_aliases删除进行测试,以提供公平的测试,并在.bashrc当前和bash-completion已安装的情况下使用适当的 bash 完成行。

1) 第一种情况是当您shopt -s failglob.bashrc.bash_aliases.

当尝试分别对完整的目录和文件进行 Tab 选项卡时,会出现以下错误:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}
Run Code Online (Sandbox Code Playgroud)

但是,命令仍将成功完成。

2)shopt -s nullglob启用后,尝试按 Tab 键完成目录或文件将导致列出所有内容,但没有完成:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............
Run Code Online (Sandbox Code Playgroud)

我已经缩短了这里的列表,因为它很长而且没有必要全部复制。

同样,命令完成仍然有效。

因此,假设您已安装并安装了适当的行,只需删除shopt -s failglobshopt -s nullglob也可以解决 bash 完成错误的问题。.bashrcbash-completion


小智 11

除了修改/etc/bash.bashrc文件(其他答案)之外,您可能还需要安装bash-completionpackage.json 。

检查/etc/bash_completion文件是否存在。如果不:

sudo apt-get install bash-completion
Run Code Online (Sandbox Code Playgroud)

(在我对 Debian 7 的安装中,它最初没有安装)


小智 8

尽管听起来很基本,但请确保 bash 是您的活动 shell

echo $SHELL
Run Code Online (Sandbox Code Playgroud)

我刚刚升级到 Ubuntu 14.04.1 LTS 并且没有选项卡自动完成功能,即使在遵循了这篇文章的建议之后,才意识到我的 shell 被设置为 ,/bin/sh而不是/bin/bash