【问题标题】:What is the best (portable and maintanable) Shell Scripting language today?当今最好的(可移植和可维护的)Shell 脚本语言是什么?
【发布时间】:2009-05-19 09:19:31
【问题描述】:

我知道这个问题过去曾引发过一场“宗教”战争,可能没有一个正确答案。但是在过去 3-4 年使用 ksh 和 csh 并经历了从一个移植到另一个或将一个通用逻辑应用于多个版本(读取为遗留代码)的痛苦之后,如果我正在编写一个新脚本,我会去ksh,但出于强迫而不是选择。除了 ksh/csh,还有更好的选择吗?还有一些可以跨 Unix(Solaris/HP/IBM/FreeBSD)和 Linux 移植的东西(如果我没有要求太多,或者它是否对所有 Linux 风格都有意义)

等待建议...

和平 :) 德旺卡姆达

【问题讨论】:

  • 请记住,ksh几乎是 Posix-Shell 的正确超集。差异很小且微妙(例如,内置 -v- 用户定义函数的默认优先顺序)。我使用 ksh 进行交互工作,但在 (posix) sh 中编写脚本。

标签: bash unix shell ksh csh


【解决方案1】:

我建议使用普通的旧 sh,它随处可见。

此外,值得注意的是,可移植性不仅涉及 shell,还涉及脚本中使用的其他命令,例如 awkgreppsecho

【讨论】:

  • 绝对坚持使用符合 POSIX 的命令功能子集。至少在 Debian 派生发行版下,您可以将 POSIX 手册页作为 manpages-posix{-dev} 获取,然后您可以通过man 1posix awk 访问(例如)POSIX awk 的手册页。
  • 您应该注意“可移植性”并不自动意味着“POSIX”。可移植脚本在大多数 /bin/sh 上运行,即使这意味着没有严格遵循 POSIX。我目前能想到的唯一具有非 POSIX(但“便携”)行为的示例 shell 可能是 Sun 的 sh。
  • 另一个值得一提的标准是Single Unix Specification。
  • 我认为 sh 是一种非常安全的方式,但正如斯蒂芬达林顿在下面指出的那样,它可能没有很多友好的功能......现在,我想取消所有建议除非您正在修改现有脚本,否则没有理由在 shell 中编写新脚本。 Perl/Python/Ruby 替代方案很有意义,因为它们在很大程度上自然可移植,并且速度在这里不应该是一个大问题 - 感谢 TheMarko 的帖子提供了这个全新的视角 :)
  • 虽然可移植性很重要;该问题还包含“可维护”作为您完全忽略的关键字。 “sh”脚本不可维护。他们经常依靠黑客来尝试完成您需要完成的事情,因为 POSIX sh 或 Bourne 只是不提供必要的功能。如果你需要 shell 脚本,我推荐 bash,如果你能负担得起依赖,我推荐 perl/python/ruby。
【解决方案2】:

如果你真的希望它是可移植的(我不知道任何 shell 脚本都是可维护的),我会指定 #!/bin/sh 并使用 dash 进行测试,如果可能的话使用其他 shell。

【讨论】:

  • Debian-derivatives 还将在包 'devscripts' 中包含脚本 checkbashims,它将检查脚本中不符合 sh 的行为。
【解决方案3】:

我希望 BASH 成为目前使用最广泛的 shell,因为它是许多 Linux 发行版的默认设置(它甚至可以使用 cygwin 在 Windows 上运行,但其他 shell 也可能如此)。 另一种选择可能是不使用 shell 本身编写脚本,而是使用其中一种脚本语言,如 perl、python、ruby ......

【讨论】:

  • 我的意思是使用 perl/python 等来编写脚本真的很有意义 :)
【解决方案4】:

我通常使用 ksh。我发现这是功能和可移植性之间的一个很好的折衷。它在大多数 Linux 机器和 Solaris 上都存在(或可用的兼容版本)。我使用 HP-UX 已经有一段时间了(谢天谢地),但我很确定它在那里也可用。

如果您需要支持的所有机器都是现代的,那么 bash 可能是一种选择。 Solaris 10 附带一份副本。这是大多数 Linux 机器上的默认设置。

您的最小公分母将是 Bourne (sh),因此如果可移植性是您的主要关注点,那么这是值得考虑的。但它缺少一些 ksh 和 bash 更友好的功能。

仍然值得避开 csh/tcsh 来编写脚本。 Csh Programming Considered Harmful 是老歌,但仍然很重要。

【讨论】:

  • 之前读过那篇(Csh Programming被认为是有害的)……确实是一篇很好的文章……谢谢分享
  • ksh几乎是 Posix shell 的适当超集,并且仍然是我今天选择的交互式 shell。我也花了很多时间在 HP-UX 上,而 ksh 是一些旧版本上可用的最好的 shell。如果我开始使用 Linux,我可能会使用 bash。
【解决方案5】:

我的答案是 perl。

'sh' 'bash' 等是否能以更好更优雅的方式完成。

而且它实际上更便携。给定版本的 perl 在所有平台上都非常一致。 Linux、Solaris 和 AIX 发行版之间没有显着差异,而在这些平台之间移植 shell 脚本确实很痛苦。

它适用于所有 Windows 平台!只要您避免使用反引号和“system()”,您的脚本就有很好的运行机会。

【讨论】:

    【解决方案6】:

    蟒蛇!查看 iPython,它是一个增强的 Python 解释器。另外:Python for Unix and Linux System Adminitration.

    您可以编写出色的可移植脚本,这很有趣。

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2016-08-21
      • 2021-07-17
      • 2011-08-04
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多