更新
set -x 似乎会产生一些有用的调试信息。systemctl
非常可疑,因为systemctl list-units --full --all
单独运行会导致相同的重启。我想我会深入研究这一点。
set -x
service [TAB]
...
etc/init.d/unattended-upgrades /etc/init.d/unscd /etc/init.d/urandom
+ shopt -u nullglob
+ COMPREPLY+=($( systemctl list-units --full --all 2>/dev/null | awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ))
++ systemctl list-units --full --all
++ awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }'
Broadcast message from root@server
(/dev/pts/1) at 12:02 ...
The system is going down for reboot NOW!
+ COMPREPLY=($( compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- "$cur" ))
++ compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- ''
+ [[ -e /etc/mandrake-release ]]
Connection to server.mydomain.net closed by remote host.
Connection to server.mydomain.net closed.
我有一台运行 Ubuntu 14.04 并安装了最新补丁的虚拟机。当我输入service
+ [TAB] 时,机器立即重新启动。其他 bash 补全似乎工作正常,例如:ls [TAB]
。只有 的补全service
似乎有问题。系统日志尚未显示任何明显问题。如果我卸载该bash-completion
软件包,问题就会消失。重新安装它,问题又回来了。有什么想法可以找到解决此问题的方法吗?
答案1
事实证明,管理员/bin/systemctl
用包含单个命令的 shell 脚本替换了二进制文件reboot
。我不知道为什么有人会这样做,但既然已经有两个人赞成了这个问题,我想我会回答。我甚至不认为该命令是 14.04 的一部分(检查了其他几台机器 - 它不在那里),所以这更奇怪。
这里值得注意的要点是它set -x
帮助我发现了问题。