在Linux和Mac OS上使autogen.sh可移植

时间:2011-09-15 15:54:07

标签: macos shell portability

我尝试安装的软件包有以下autogen.sh(仅显示第一行):

#! /bin/sh
libtoolize --automake

但是,Mac上的 ,一旦安装GNU libtool(例如通过MacPorts), libtoolize将重命名为glibtoolize 。在this answer之后,我因此想要将上面的autogen.sh修改为:

#! /bin/sh
if [ $(hash libtoolize 2>&-) -eq 0 ]
then
        libtoolize --automake
else
        glibtoolize --automake
fi

但它会返回./autogen.sh: line 6: [: -eq: unary operator expected。我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

我无法评论(还没有足够的代表),但我想指出的是,如果你通过简单调用autoreconf工具替换autogen.sh脚本,这实际上可能是最好的。是专门创建的,以替换所有那些autogen.sh,bootstrap.sh等脚本。它是任何autoconf的一部分(不确定从什么时候开始,但肯定是autoconf 2.63的一部分(当前是2.68)。

答案 1 :(得分:1)

您遇到的问题是$(hash libtoolize 2>&-)没有输出,因此该行被解释为:if [ -eq 0 ]

可以通过$?访问该命令的返回码,因此您可以执行以下操作:

hash libtoolize 2>&-
if [ $? -eq 0]; then
    #....

但是,您也可以这样做:

if hash libtoolize 2>&-
then
        libtoolize --automake
else
        glibtoolize --automake
fi