OS X 是否有最小的 POSIX shell 实现?我喜欢编写相当可移植的 shell 脚本,并希望预先捕获尽可能多的不兼容或攻击。我无意更换系统/bin/sh
。
/bin/sh
OS X 上10.11.4
是 GNU bash 3.2.57 或基于它的。
$ /bin/sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
/bin/bash
尽管两个文件不同,但报告的版本字符串相同。顺便说一下为什么会这样?
$ diff /bin/sh /bin/bash
Binary files /bin/sh and /bin/bash differ
不管怎样,POSIX 兼容模式bash
仍然会做一些标准不要求的事情(并且事实上并不像 那样通用local
),例如这种形式的大括号扩展。
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
答案1
MacPorts 有dash
,这就是 Debian 使用的。对于该选择和其他选择,请阅读是否有最低限度兼容 POSIX.2 的 shell?,其中答案指出该标准在某些地方是模糊的。
答案2
除了 之外dash
,还有:
Schily Bourne Shell 源自 OpenSolaris 的 Bourne Shell 源。
可以在 pkgin/pkgsrc 上找到。
两个选项pkgin
:
- 最小 POSIX 兼容变体 (pbosh)
- 符合 POSIX 标准的扩展变体 (bosh)
Joyent 提供 macospkgin 二进制包
http://schilytools.sourceforge.net/bosh.html
我没有在 Mac 上使用过它,但使用过 OpenSolaris 的各种变体。