eff*_*ffe 10 bash auto-completion
Ubuntu 16.04.1 LTS
我不知道我做了什么,一切正常,但是从今天起,当我使用 sudo 时,我的 bash 不再自动完成。我可以以普通用户身份使用自动完成功能,我可以以 root 用户身份使用自动完成功能,我可以使用 sudo 对目录使用自动完成功能,但是如果我使用 sudo,我就不能对文件使用自动完成功能。
如果我写:
$sudo vim /etc/ssm[TAB]
Run Code Online (Sandbox Code Playgroud)
它将自动完成:
$sudo vim /etc/ssmtp/
Run Code Online (Sandbox Code Playgroud)
但是如果我再次点击 [TAB],甚至两次,就像我习惯于列出目录中的文件一样,没有任何反应。我已经检查过并且我在用户 .bashrc 和 /etc/bash.bashrc 中启用了自动完成
Bet*_*sen 10
首先尝试使用以下命令重新安装 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
Run Code Online (Sandbox Code Playgroud)
同时检查两者的包含文件夹和文件的权限/etc/bash.bashrc
和~/.bashrc
-所有权应该是根:分别yourusergroup:根和yourusername。文件的权限很重要,因为 shell 仅使用您自己的权限级别来自动完成命令。提升权限(例如调用 sudo 时)仅在通过按 Enter 提交命令后使用。
小智 6
添加
complete -cf sudo
Run Code Online (Sandbox Code Playgroud)
到您的.bashrc
和.bash_profile
。自动完成将在下次登录时工作