是否有没有扩展名的 /bin/sh 的免费实现?

是否有没有扩展名的 /bin/sh 的免费实现?

我想开发可移植/bin/sh脚本,但我的环境链接/bin/sh/bin/bash.即使在--posix模式下运行,/bin/bash仍然可以处理一些不可移植的功能,例如[[$()。我(现在)意识到这些bash扩展是不可移植的,但我不知道我正在使用的其他语法并不总是可用。

是否有一个免费的实现,/bin/sh它拒绝不可移植的构造,我可以用它来测试我的脚本是否不使用任何bash-isms?

答案1

boshPOSIXified Bourne Shell怎么样:

它仍然有一些扩展,但它们有很好的文档记录:

http://schilytools.sourceforge.net/man/man1/bosh.1.html

它比它快一点dash,比它慢一点,ksh93这使它成为第二快的 shell。

请注意,dash不支持多字节字符,因此仅对小型嵌入式系统有用。

顺便说一句:bosh允许细粒度配置行为。 Solaris-10 兼容osh版本是从与bosh.看一下Makefile。当我有时间时,我可能会看看是否可以Makefile为此目的创建一个预配置。

更新:在过去的几天里,我创建了“bosh”的新编译变体,并将其命名为“pbosh”。它将包含在下一个计划的 schilytools 快照中,该快照很可能于 2018 年 6 月 29 日或 7 月 2 日发布。

“pbosh”是一个旨在测试 shell 脚本可移植性的 shell。

它没有实现 POSIX 上的扩展,因此如果使用超出 POSIX 标准的 shell 功能,则会失败。

请记住,与“pbosh”一起使用的脚本仍然可能在其他 shell 中失败,因为 POSIX 有一些未指定的功能。一个例子是管道的创建方式。 “pbosh”实现了优化方法,并且如果这是 shell 内置程序,则从 shell 进程内的管道运行最右边的程序。因此,很可能所有与“pbosh”一起工作的管道也将与“ksh93”一起工作,但仍然可能会因“bash”而失败。

如果您想检查您的脚本是否可移植到 Solaris 10 上存在的 SVr4 Bourne Shell,建议检查它是否也可以与 schilytools 中名为“osh”的另一个“bosh”编译变体一起运行。这是 Solaris 10 SVr5 Bourne Shell 的便携式版本。

注意:为了使“pbosh”发挥一半作用,默认情况下不会禁用持久别名。您还可以使用其他 shell 测试您的脚本,或者编辑 Makefile 并使用以下命令注释掉以下行:

CPPOPTS +=      -DDO_GLOBALALIASES      # Include persistent aliases in ~/.globals 
CPPOPTS +=      -DDO_LOCALALIASES       # Include persistent aliases in .locals 

然后调用“make clean all”来重新编译“pbosh”并禁用持久别名。

相关内容