我用以下命令用 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
虽然已链接,但并未打开外壳。问题是为什么?我该如何解决?
它应该这样做。如果您将其作为 启动sh
,则它假定您需要与其他称为 的 shell 大部分兼容的东西sh
,并在兼容模式下运行。
请参阅http://zsh.sourceforge.net/Doc/Release/Invocation.html#Compatibility:
岩组尝试仿效SH或ksh的,当它被调用作为
sh
或ksh
分别; [...]在sh和ksh兼容模式下,以下参数不是特殊的,也不是由 shell 初始化的: ...
prompt
,PROMPT
, ...不执行通常的 zsh 启动/关闭脚本。
我不确定在调用 as 时是否可能无法在兼容模式下工作sh
,但这可能会破坏系统上的许多脚本,这些脚本假定/bin/sh
为sh
,而不是 Zsh。
可能最好改为运行它zsh
。