我有一个shell脚本需要在多个平台上运行,这些平台都支持bash。我的问题是一些命令在Linux、FreeBSD、OS X和Cygwin上的表现不同。我目前的思路是:
- 在主脚本中创建所有操作系统特定操作的默认实现,然后检查 $OSTYPE 并 source 特定于实现的文件(可选),以替换表现不同的命令。但如果这样做,应该如何处理带有多个参数的命令?四个位置参数传递给一个函数并不是最清晰的方法。 - 将所有实现放在我的脚本中,每个名称都有一个后缀,在名称中检查 $OSTYPE 并创建一个 OPSUFFIX 变量,然后为每个操作调用 operation$OPSUFFIX。 - 通过 ./configure 魔法? - 迁移到类似Python的东西——也许是最明智的选择,但需要最多的代码更改。但如果这是惯用的 init 脚本,则这不是一个选项。
- 在主脚本中创建所有操作系统特定操作的默认实现,然后检查 $OSTYPE 并 source 特定于实现的文件(可选),以替换表现不同的命令。但如果这样做,应该如何处理带有多个参数的命令?四个位置参数传递给一个函数并不是最清晰的方法。 - 将所有实现放在我的脚本中,每个名称都有一个后缀,在名称中检查 $OSTYPE 并创建一个 OPSUFFIX 变量,然后为每个操作调用 operation$OPSUFFIX。 - 通过 ./configure 魔法? - 迁移到类似Python的东西——也许是最明智的选择,但需要最多的代码更改。但如果这是惯用的 init 脚本,则这不是一个选项。
sh
而不是bash
编写脚本,以便脚本可以在任何(兼容 POSIX 的)shell 中运行。 - chepneradduser
命令。 - David Ehrmann