用 zsh 替换 sh

mah*_*ood 1 shell ubuntu zsh

我用以下命令用 zsh 替换了 sh:

$ 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
Run Code Online (Sandbox Code Playgroud)

如您所见,该sh命令zsh虽然已链接,但并未打开外壳。问题是为什么?我该如何解决?

ilk*_*chu 5

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

请参阅http://zsh.sourceforge.net/Doc/Release/Invocation.html#Compatibility

岩组尝试仿效SHksh的,当它被调用作为shksh分别; [...]

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

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

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

可能最好改为运行它zsh