以root身份登录时,自动补全功能不起作用


23

我刚刚遇到了令我非常困扰的事情。ubuntu上的自动完成功能就像一个超级按钮一样,但是当我以root身份登录时,例如,sutab有时只会自动完成。

为什么会这样工作?一个可以改变吗?


您实际上是以root用户身份登录还是使用sudo su?
马蒂·弗里德

@MartyFried是的,我是diong sudo su。有什么不同?
Patryk'2

它似乎对我有用,您能为我们提供何时无法使用的特定实例,我们可以复制一些实例。
ste_kwr 2012年

1
@lordmonkey:也许没有,我不太确定。我认为su或sudo su本身在某种程度上是我不记得的方式有所不同,因此我想确保可以在相同条件下进行检查。看起来似乎可行,但是您说“有时”,所以我只能建议您仔细检查并尝试使其具有可复制性,或者只是确保没有其他事情正在欺骗您-即,用户错误-嘿,它发生在每个人身上!:)
马蒂·弗里德

Answers:


41

检查/root/.bashrc文件中的这些行

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

如果不存在,请使用您喜欢的文本编辑器将其添加到文件末尾。


我的.bashrc包含上面提到的行,但已被注释掉;取消注释行并获取新的.bashrc;现在情况看起来不错。
Ankit

bash_completion至少在我的情况下,该行已被注释掉,因为它声称bash_completion已在中启用了/etc/bash.bashrc该行,但该文件也已将该行注释掉了。与其取消注释etc文件,不如取消注释该行/root/.bashrc
Peregring-lk

7

您尚未提到使用哪个Ubuntu版本。

  • 检查是否bash-completion安装了软件包:

    sudo apt-get install bash-completion
  • 如果我使用以下方式登录,则我的工作正常: sudo -i


删除root的.bashrc有什么意义?
geirha 2012年

我认为它将在下次注销/登录时重新生成默认的.bashrc。或者,它可能包含某种用于自动完成的“停用”功能(不知道是否可行)。我不记得我写下来的真正原因。
Savvas Radevic 2012年

2
不,.bashrc不会创建新的,也不会找到新/etc/bash_completion的,只有bash的默认完成才可用。
geirha 2012年

确定,已编辑并删除。谢谢您的意见!虽然我不知道的〜/ .bashrc可以“unsource”文件,或者disable-completion是仍然可用:superuser.com/questions/37148/...
SAVVAS Radevic

3

为Ubuntu 13.10,检查/etc/bash.bashrc

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

他们可能会被评论。取消注释它们是可行的。


0

发现这可行(类似于上面的答案,但有一个转折)

需要编辑的文件(至少在我的情况下是12.04)是/root/.bashrc。在我的情况下,这很有意义,因为我的普通用户可以自动完成,但是我的root用户却不能。

无论如何,在上述文件中,我找到了所有必需的代码,但已将其注释掉:

# 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

只是没有评论:

# 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

保存,并且效果很好。

希望这对某人有帮助。


0

在Linux Mint 18(基于Xenial)中,您必须编辑bashrc:

sudo nano /etc/bash.bashrc

并注释掉(删除#每行前面的内容)此部分:

if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
     . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
     . /etc/bash_completion
  fi
fi

就这样。

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.