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 這樣的普通 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

機器仍在啟動。

相關內容