以 root 身份中断的服务命令的 Shell 选项卡完成

Zac*_*ern 7 bash root auto-completion 12.04

在我们的大多数服务器上,以 root 身份输入服务命令后,服务名称的制表符补全不再有效。它作为非 root 工作得很好。这是在 Ubuntu 12.04 上。我不知道如何解决这个问题。

演示:

Tab 补全作为普通用户使用zachary,他按 Tab 键在第一张图片中列出补全:

标签完成工作

但是作为 user root,它不会将服务列为完成(仅文件):

现在它没有

任何帮助将不胜感激。

ger*_*ijk 4

Ubuntu 上默认禁用此功能。

阅读您的/root/.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 [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi
Run Code Online (Sandbox Code Playgroud)

Bash 补全全部注释掉。显然有一个我不知道的原因(也许恢复单用户模式?)。

sudo su当你这样做时它确实起作用的原因sudo -ssudo bash它并没有真正运行login让你完全扎根。当运行时sudo su -,或者sudo -i它确实完全以该用户的身份登录。在这里,通过环境变量的示例$HOME,更多地了解这种差异:

gert@gert-laptop:~$ id
uid=1000(gert) gid=1000(gert) groups=1000(gert),4(adm),7(lp),24(cdrom),27(sudo),[...]
gert@gert-laptop:~$ echo $HOME
/home/gert
gert@gert-laptop:~$ sudo -s
root@gert-laptop:~# id
uid=0(root) gid=0(root) groups=0(root)
root@gert-laptop:~# echo $HOME
/home/gert
root@gert-laptop:~# exit
gert@gert-laptop:~$ sudo su -
root@gert-laptop:~# id
uid=0(root) gid=0(root) groups=0(root)
root@gert-laptop:~# echo $HOME
/root
Run Code Online (Sandbox Code Playgroud)