linux - bash vs csh vs 其他——哪个更适合应用程序维护?

标签 linux bash zsh csh tcsh

<分区>

Possible Duplicate:
What Linux shell should I use?

我开始精通 Linux 环境,并且我正在尝试在命令 shell 脚本方面选择一种选择武器(因为我在这方面仍然是一个大 n00b),这将帮助我(和其他人)管理、测试和管理在 *NIX 环境中运行的一组服务器端应用程序。

我的问题是:当考虑以下标准时,首选的命令 shell 是什么:

  1. 对于从未接触过 shell 脚本的初级开发人员来说,学习/理解它有多容易?

  2. 是否有大量开发人员知道此 shell 脚本?

  3. 它是否安全且易于使用 - 脚本错误是否会被静音或提供智能错误输出,是否会让外行搬起石头砸自己的脚?

  4. 它的便携性如何? - 我可以期望相同的脚本在 OpenSolaris 以及 Redhat、FreeBSD 中运行吗? (特定操作系统的授权命令语法和选项将相应更改)

  5. 它的标准如何?预计它会包含在大多数 *NIX 发行版中,还是必须额外安装?

我知道有些阵营对特定的命令 shell 持有强烈的支持/反对意见,我只是在寻找一个有根据的意见。

最佳答案

如今,几乎所有非嵌入式(或大型嵌入式)操作系统都有一个 POSIX:2001 a.k.a. Single Unix v3兼容层。它在 unix 平台(Linux、Mac OS X、Solaris、*BSD 等)上是原生的,并且可以安装在其他平台上,例如 Windows 和 Android。 POSIX 指定一个 shell语言,通常称为 POSIX sh。这种语言源自 Bourne shell。

大多数 unix 系统都有 POSIX sh 的两种实现之一:ksh 或 bash,与 POSIX 相比,它们具有额外的有用功能。然而,一些不太主流的系统(尤其是嵌入式系统)可能只有 POSIX 规定的功能。

鉴于您的目标,我看到三个选择:

  • 限制自己使用 POSIX sh。优点:您不必担心不同的变体,因为有一个标准且兼容的实现很容易获得。缺点:您不会从 bash 和 ksh 的扩展中获益。
  • 使用 ksh 和 bash 的交集。这在外观上很吸引人,但它确实意味着您必须使用两个引用文档而不是一个 — 甚至 bash 和 ksh 共有的功能并不总是使用相同的语法。弄清楚要在给定系统上使用哪个也很痛苦。
  • 选择 ksh 或 bash 之一。 bash 和 ksh 在所有类 unix 平台和 Windows 上都可用。两者都有一个可以安装在大多数平台上的开源实现(bash 的唯一实现,ksh 的 ATT ksh93)。出于两个原因,我会选择 bash 而不是 ksh。首先,它是 Linux 上的默认设置,因此您会发现更多人习惯了它。其次,有些系统带有较旧的、功能较少的 ksh 实现;即使您可以安装 ksh93,这也是您在部署时必须考虑的另一件事。

忘记使用 csh 来编写脚本,如果您想要通用的默认可用性,则忘记 zsh。

另见 What are the fundamental differences between the mainstream *NIX shells? ,特别是 my answer 的“脚本”部分.

请注意,shell 编程涉及 shell 之外的其他实用程序。 POSIX 指定了那些其他实用程序。 “Bash 加上其他 POSIX 实用程序”是一个合理的选择,不同于“POSIX 实用程序(包括 sh)”。

关于linux - bash vs csh vs 其他——哪个更适合应用程序维护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317247/

相关文章:

mysql - 如何通过本地 Linux 机器截断(删除所有行)远程 SQL 服务器上的表

linux - 让 xvfb-run 作为后台进程并注销

linux - 为什么 rpcbind 每次重启都会打开一个新的不同的端口?

zsh - Zsh 自动加载中的 -U 选项的用途是什么

git - 为什么$vcs_info_msg_0_的echo结果在zsh中包含奇怪的字符?

php - http请求到同一网络的其他计算机失败

bash - 如何从字符串中删除空格?

linux - 避免将脚本参数作为文件进行评估 [BASH、LINUX]

bash - 使用定时脚本循环音频文件

linux - 为什么 zsh 不会自动完成自定义创建的脚本,而 bash 会自动完成?