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 的命令没有取代该组...