切换到 ZSH 有哪些风险?

切换到 ZSH 有哪些风险?

大多数针对 Mac 的建议都是假设您使用 Bash shell 而编写的。如果我切换到 zsh,我的系统上现有的 Bash 脚本会有多大的不兼容,SU 上的人会给我什么建议?

#!/bin/sh我的脚本开头的这一行有帮助吗?

编辑:与问题无关的是为什么我要这样做。更好的制表符补全。我刚刚尝试在 zsh 中输入登录脚本正如这里建议的那样我完全被震撼了。

答案1

您显示的 shebang 行表示使用 Bourne shell(或兼容模式下的另一个 shell)运行脚本。如果您将 zsh 切换到交互式 shell,这些脚本可能会继续使用它们现在的相同 shell 运行。唯一会改变的方式是链接shzsh,但这不应该改变功能。

当将 zsh 和 Bash 用作登录 shell 或使用 shebang 行编写专门调用其中一个或另一个的脚本时,你会发现它们之间存在一定程度的兼容性,例如:

#!/usr/bin/bash

或者

#!/usr/bin/zsh

但是,zsh 有很多功能与 Bash 不同,甚至 Bash 根本无法做到。Bash 的使用范围更广,因此熟悉 zsh 复杂功能的人更少。不过,有关它的信息随处可见。此外,您会发现这里提供的帮助绰绰有余。

您会发现,对于编写脚本而言,这两种 shell 都比 Bourne shell ( ) 强大得多sh,但以牺牲可移植性为代价。此外,由于 Bash 比 zsh 使用更广泛,因此其脚本的可移植性相对较高。

答案2

我不是 zsh 用户,但从我在 SuperUser 和其他地方读到的内容来看,我一直觉得它的粉丝更关注它的交互使用附加功能,而不是脚本功能。zsh 的描述的第一句话ZSH 网站,呼应了对交互特性的强调:“Zsh 是一个为交互使用而设计的 shell,尽管它也是一种强大的脚本语言。”

也就是说,如果您打算切换登录 shell,您可以继续用 bash 编写脚本。正如另一个答案指出的那样,bash 脚本的可移植性更强。

无论您的登录 shell 是什么,具有显式#!/bin/sh(或#!/bin/bash任何其他路径)的现有脚本都将继续正常工作。

答案3

这里您将找到一份“巴什主义“,也就是说,这些代码片段可以在 bash shell 中运行,但不能在其他 bourne 兼容 shell 中运行。

如果您想在编写 shell 脚本时实现最大的可移植性,那么请启动您的脚本#!/bin/sh并避免使用“bashisms”,以便它可以在任何其他 posix 兼容 shell 中运行,例如 ksh 或 zsh。

答案4

/bin/sh指向 bash,以兼容模式运行它。更改登录 shell 的唯一变化是哪些内置程序可用以及它们的工作方式。脚本遵循其 shebang 行。

相关内容