编写跨平台shell脚本的最佳方法是什么

时间:2014-09-17 23:07:16

标签: bash shell cross-platform

我有一个shell脚本我想在多个支持bash的平台上运行。我的问题是某些命令在Linux,FreeBSD,OS X和Cygwin上表现不同。

到目前为止我的想法是:

  • 为主脚本中的所有特定于操作系统的操作创建函数的默认实现,然后检查$OSTYPEsource特定于实现的文件,该文件(可选)替换行为不同的命令。如果我这样做,我应该如何使用多个参数处理命令?传递给函数的四个位置参数不是最干净的方法。
  • 将所有实现放入我的脚本中,每个实现都在名称中加上一个词缀,检查$OSTYPE并创建一个OPSUFFIX变量,然后为每个操作调用operation$OPSUFFIX
  • ./configure魔法?
  • 迁移到类似Python的东西 - 可能是最明智的,但需要更多的代码更改。如果这是一个惯用的init脚本,那么这不是一个选项。

1 个答案:

答案 0 :(得分:1)

首先,尽可能找到在差异无关紧要的情况下做你想做的事情的方法。例如,某些版本的tar用于不支持-z选项来处理gzip压缩文件。然而,结合tar和gzip是可移植的。类似地,有一些方法可以调用ps,它们通常在BSD和LINUX上都有效。

一旦你发现你仍然需要处理的事情,你采购文件以提供处理命令语法的函数似乎是合理的。为了避免位置参数,你可以使用内置bash的getopt。

另一种方法可能是编写一个python脚本或类似的脚本,它只封装了与platfrom相关的最糟糕的命令行为。