带破折号的 sudo 给出错误的替换

带破折号的 sudo 给出错误的替换

我尝试通过 Emacs 的 Tramp 访问新安装的系统,就像我访问其他所有系统一样:

C-x C-f /ssh:server|sudo:root@server:/etc/network/interfaces

此命令超时。经过一番调查,我发现sudodash似乎不兼容,尽管我的命令sudoers很简单:

# grep -P -v '^(#.*)?$' /etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root    ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

当我使用像 Bash 这样的普通 shell 时,以下命令可以正常工作:

env SHELL=/bin/bash sudo -u root -s -H

但是当我使用链接到 /bin/sh 的破折号时,以下命令

env SHELL=/bin/sh sudo -u root -s -H

产生无限循环

/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
/bin/sh: 0: Bad substitution
...

只有 才能阻止kill -9

我希望这样做apt-get purge dash,但操作系统坚持保留它。

如何解决这个问题?

答案1

我做到了:

cd /bin
rm sh
ln -s bash sh
apt-get purge dash
apt-mark hold dash

机器仍在启动。

相关内容