bash 补全导致 Ubuntu 14.04 重启

bash 补全导致 Ubuntu 14.04 重启

更新

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帮助我发现了问题。

相关内容