我是 Linux 新手,对 shell 脚本有一些疑问:
- 壳
- C 壳
- Bash 外壳
- 伯恩壳
- 科恩壳牌
这么多“shell”!对于这些,我如何知道我的 Linux 系统配置了哪些解释器?如果我不支持,korn
那么我该如何配置我的系统来支持它?
另外,哪一个 shell 最“活跃”(最频繁更新和维护)?
提前致谢!
答案1
你所提到的问题正是我们拥有POSIX 兼容 Shell以及编写“可移植”代码的能力。只要您遵守该链接中列出的符合 POSIX 的语法,您就可以放心,您的代码是可移植的。
话虽如此,如果您的目标受众仅仅是 Linux,那么我见过的每个 Linux 发行版都带有bash
默认 shell,因此您可以相当有信心,兼容 Bash 3.x 的脚本几乎可以在任何 Linux 发行版上运行。
答案2
第一个 UNIX 是在 AT&T 开发的。第一个 shell 是 Bourne shell。它非常酷,但也有一些严重的局限性。
当家伙在伯克利开始使用 UNIX 并试图使其变得更好,他们推出了 C shell。它有一种不同的编程语言(尽管它本身也有缺陷),但在交互使用方面则要好得多。由于它在交互使用方面的优势,它在从 Berkeley UNIX 衍生的任何 UNIX 中都非常流行。
C shell(或 csh)衍生出一个名为 tcsh 的开源克隆。如果您使用 csh,您可能不会使用“真正的”或原始 csh,而是使用 tcsh。
与此同时,UNIX 的开发者们并没有袖手旁观。Dave Korn(好人)创建了一个新的 shell,叫做... Korn shell。它遵循了 Bourne shell 创建的编程模型(可以说优于 csh 模型)。它变得非常流行,成为许多人的日常 shell。它也成为了 UNIX 规范的一部分。这催生了一个相当流行的开源克隆,叫做 pdksh,它非常接近(但不是 100%)兼容。最终 AT&T 将代码作为开源发布。
GNU 团队希望开发自己的 UNIX 式系统,因此他们需要一个 shell,一个可以无需担心许可问题的 shell。他们创建了 bash,即 Bourne Again SHell。它与原始 Bourne 基本兼容,并借鉴了 Csh 和 Ksh 的思想,它之所以流行,既因为它易于使用,也因为它随每个 Linux 一起提供。它已经有几个版本,版本 2 是第一个非常实用的版本,现在的版本 4 具有新功能。
然后出现了 zsh。它也遵循 Bourne shell 语法,并复制了 Bourne shell、ksh、csh 和 bash 中的优点。可以说,它拥有最先进的语法,并且具有其他 shell 所没有的功能。
总结那么,该用什么呢?如果您正在编写启动脚本,则需要使用与 POSIX/Original Bourne 兼容的 /bin/sh。该语言比较简陋,但即使没有 /usr 等磁盘,它也能运行。
如果不是启动脚本,您还有更多选择。如果您只使用自己的机器,请使用当前可用的任何脚本。您可以控制自己的机器。如果您编写的脚本是要赠送给其他人,我会使用 /bin/sh 或 bash。/bin/sh 虽然简单,但始终可用。bash 是开源的,因此几乎始终可用,它足够老旧,可以随处使用,但又足够新,可以拥有一些新功能。Csh 并非随处可用,zsh 也并非随处可用。