sudo 命令不再对文件自动完成

sudo 命令不再对文件自动完成

Ubuntu 16.04.1 LTS

我不知道我做了什么,一切都运行正常,但从今天起,当我使用 sudo 时,我的 bash 不再自动完成。我可以以普通用户身份使用自动完成功能,我可以以 root 身份使用自动完成功能,我可以使用 sudo 对目录进行自动完成,但如果使用 sudo,我无法对文件进行自动完成。

如果我写:

$sudo vim /etc/ssm[TAB]

它会自动完成:

$sudo vim /etc/ssmtp/

但如果我再次按 [TAB],甚至按两次(就像我习惯列出目录中的文件一样),什么也不会发生。我已经检查过了,我在用户 .bashrc 和 /etc/bash.bashrc 中启用了自动完成功能

答案1

先尝试一下重新安装 bash-completion包装内容:

sudo apt-get install --reinstall bash-completion

然后备份你的 .bashrc 文件

mv ~/.bashrc ~/.bashrc.bak

最后,替换你的 .bashrc 文件/etc/skel/.bashrc使用默认值:

cp /etc/skel/.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 ! 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

还要检查包含文件夹和文件的权限/etc/bash.bashrc-~/.bashrc所有权应分别为 root:root 和 yourusername:yourusergroup。文件的权限很重要,因为 shell 仅使用您自己的权限级别来自动完成命令。只有在按 Enter 提交命令后,才会使用提升的权限(例如调用 sudo 时)。

答案2

添加

complete -cf sudo

到您的.bashrc.bash_profile。自动完成将在下次登录时起作用

答案3

我发现问题不在于自动完成,而只是权限问题。文件夹的所有者是 root:mail,而不是 root:root,因为 /etc 中的大多数目录和我的用户都不在邮件组中。一旦我将用户添加到正确的组,它就可以正常工作。我只是不明白为什么前面带有 sudo 的命令没有取代该组...

相关内容