ダッシュ付きの sudo は間違った置換を行う

ダッシュ付きの sudo は間違った置換を行う

私は他のシステムと同じように、Emacs の Tramp 経由で新しくインストールしたシステムにアクセスしようとしました。

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

このコマンドはタイムアウトしました。調査した結果、sudoと はdash互換性がないようですが、 私の は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 のような通常のシェルを使用する場合、次のコマンドは正常に機能します。

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が、OS がそれを維持するように要求します。

これを修正するにはどうすればいいでしょうか?

答え1

やったよ:

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

マシンはまだ起動中です。

関連情報