在编写 shell 脚本时,为了获得尽可能多的可移植性,人们可能想要尝试并坚持使用可能已经安装在目标系统上的命令行工具。
我们可以评估特定工具,如本例所示:
是否存在默认安装中没有 awk 的 Unix 版本?
我们也可以按目标发行版进行搜索,例如:
Debian 中默认安装了哪些软件包?[...]
与这种一次搜索一个命令/发行版相比,是否有任何官方的或某种既定的命令集如果没有被授予,但至少很可能安装在任何 *nix 系统上?如果我们将其缩小到 Linux 会怎样?
任何可以合理地称为 Unix 或类 Unix 的东西都有POSIX实用程序。您通常可以假设这些实用程序存在,它们支持列出的选项,并且它们的行为如所示。有一些限制:
以下是您在许多 Linux 发行版上可能会遇到的限制:
ed
并且pax
经常从默认安装中丢失。如果您仅限于非嵌入式 Linux,您可以做出一些额外的假设。
/bin/sh
可能不是bash。在嵌入式 Linux 上,shell 和实用程序通常来自BusyBox。因为 BusyBox 是为小型系统设计的,所以它故意省略了一些特性,包括 POSIX 强制要求的特性。BusyBox 有很多编译时配置选项,因此您无法真正预测给定系统上可用的内容。如果您想最大限度地提高对嵌入式 Linux 的可移植性,当您使用某个实用程序时,请在 BusyBox 中查看其源代码并避免使用条件编译保护下的选项。如果安装完全缺少该实用程序,这将无济于事。
归档时间: |
|
查看次数: |
47 次 |
最近记录: |