我正在运行autoconf和configure将SHELL设置为'/bin/sh'。
这会导致巨大的问题。如何强制SHELL对于autoconf是'/bin/bash'呢?
我正在尝试在osx上运行它,它在linux上运行良好。Linux使用SHELL=/bin/bash。 osx默认为/bin/sh。
我在Solaris上使用GCC时遇到了类似的问题 - 我采用了“标准”的技术:
CONFIG_SHELL=/bin/bash ./configure ...
Autoconf旨在通过生成可以在“任何地方”运行的脚本来解决可移植性问题。这就是为什么它会生成奇怪的代码,例如:
if test X$foo = X ; then ... # check if foo is empty
而不是:
if [ "$x" = "" ] ; then ...
"x$foo"
(除了x
前缀外还有双引号)而不是"$foo"
与空字符串无关。这与"$foo"
可能会计算为类似于-f
的测试选项的情况有关。 - adlSHELL 是在哪里设置的?当您想要 /bin/bash 时,使用 /bin/sh 运行什么?
配置脚本旨在在任何地方运行,即使在野外存在着糟糕的和非 Bash shell。
编辑:问题到底是什么?
另一个编辑:也许您想让脚本重新执行自己,类似于这样。它可能有漏洞:
if test "$SHELL" = "/bin/sh" && test -x /bin/bash; then
exec /bin/bash -c "$0" "$@"
fi
ln -f /bin/bash /bin/sh
:-P(不,这不是一个严肃的答案。请不要通过执行上述命令来破坏你的系统!)