将 sh 替换为 zsh

将 sh 替换为 zsh

我已使用以下命令将 sh 替换为 zsh:

$ sudo mv /bin/sh /bin/sh1
$ sudo ln -s /usr/bin/zsh /bin/sh
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 12 Jul  6 20:48 /bin/sh -> /usr/bin/zsh
$ which sh
/bin/sh
$ sh
$ exit
$ zsh
mpc% exit

正如您所看到的,尽管该命令已链接,但它sh不会打开shell。zsh问题是为什么?我该如何解决这个问题?

答案1

它应该这样做。如果您将其启动为sh,则它假定您想要与称为 的其他 shell 大部分兼容的东西sh,并以兼容模式运行。

http://zsh.sourceforge.net/Doc/Release/Initation.html#Compatibility:

Zsh 尝试模仿或者克什当它被分别调用为sh或 时ksh; [...]

克什兼容模式以下参数不是特殊的,也不是由 shell 初始化的: ... prompt, PROMPT, ...

不执行通常的 zsh 启动/关闭脚本。

我不确定调用 as 时是否可能无法在兼容模式下工作sh,但这可能会破坏系统上的许多脚本,这些脚本假设/bin/sh只是sh,而不是 Zsh。

可能最好改为运行它zsh

答案2

为什么不使用以下命令来更改用户的默认 shell chsh

$ chsh -s /usr/bin/zsh

参考

相关内容