获取自动补全功能


9

我当前正在运行64位Debian Wheezy。

我在apt-get的自动完成方面遇到了一些麻烦。我已经安装了bash-completion。

如果我以root用户身份登录shell,则可以对apt-get使用自动补全功能(例如:apt-get install wicd [tab] [tab ]),它将显示与之匹配的所有软件包。但是,如果我尝试对另一个非root用户(即使使用sudo)对apt-get使用自动补全功能,则根本无法使用。我可以自动完成其他操作,例如文件名。

有什么帮助吗?

我的.bashrc和/ etc / profile中确实有以下代码

 if [ -f /etc/bash_completion ]; then
      . /etc/bash_completion
 fi

1
首先,检查root用户和其他用户是否具有相同的shell。如果没有,那就是不同行为的原因。否则,请尝试以下操作:'apt-cache --no-generate pkgnames“ wicd”'。它行得通吗?这就是bash用于生成“ apt-get install wicd [TAB]”的完成的内容。
安格斯2012年

他们都使用同一个shell,bash。您给我的apt-cache命令可以正常工作,并显示所有wicd软件包的列表。另外,我发现的是,当我的计算机第一次启动时,并且我第一次登录外壳程序(我没有gui登录),apt-get自动完成功能将适用于任何帐户。但是,如果我使用startx运行我的fvwm-crystal窗口管理器,然后打开一个终端,仅使用我的用户帐户将无法再次运行。它仍然可以与fvwm-crystal中的root一起使用。
丹尼斯·林努兹

好的,这可能正在发生。/ etc / profile和.bash_profile在登录shell上运行。也就是说,当您在控制台上登录或运行“ su”时。由于在这种情况下完成工作有效,因此/ etc / profile是有效的。剩下的是〜/ .bashrc。检查行'。/ etc / bash_completion'实际上正在执行。在其前面放“ echo OK”之类的东西,打开一个新的终端,然后检查它是否显示“ OK”。
安格斯2012年

您曾经测试过ZSH吗?
Mohammad Efazati

您的.bashrc可能会完全丢失;这就是我的情况
Galvani,2015年

Answers:


6

您的/etc/bash_completion文件必须丢失。

sudo apt-get install bash-completion

应该解决您所有的问题。

既然您已经有/etc/bash.bashrcFaheem Mitha和其他人指出的注释行,那么现在应该可以使用:

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

原因:bash-completion软件包现在具有该文件(/ etc / bash_completion)。它曾经在bash包装中,但现在没有了。

包装变更信息


/ etc / bash_completion文件中应该包含什么?我运行了install bash-completion命令,所有内容都已经是最新版本,但是我的bash完成文件为空
fifamaniac04 '16


1

我不记得这是否有必要,但请尝试从/etc/bash.bashrc尚未注释的注释中取消注释相应的行,即

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

0

我记得,命令参数的bash自动补全是通过 complete命令。您应该有一个由root用户bashrc(也许是/root/.bashrc)加载的apt-get完成脚本,因此您需要root登录才能运行它。Sudo不会加载root登录脚本,它只是为您提供特权。

也许您缺少针对非root用户的自动完成脚本,因此他们没有为apt-get配置bash自动完成。如果是这样,请在sudoers文件中为具有ALL特权的用户加载该功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.