Сделайте autogen.sh переносимым на Linux и Mac OS - PullRequest
1 голос
/ 15 сентября 2011

пакет, который я пытаюсь установить, имеет следующий файл autogen.sh (показаны только первые строки):

#! /bin/sh
libtoolize --automake

Однако на Mac , один раз GNUlibtool установлен (например, через MacPorts), libtoolize переименован в glibtoolize .После этого ответа я хочу изменить приведенный выше файл 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 ]

3 голосов
/ 01 декабря 2011

Я не могу комментировать (пока недостаточно репов), но я хотел бы отметить, что в наши дни может быть лучше, если вы замените скрипт autogen.sh простым вызовом инструмента autoreconf, который был специальносоздан для замены всех этих сценариев autogen.sh, bootstrap.sh и т. д.Это часть любого autoconf (не уверен с тех пор, когда, но определенно был частью autoconf 2.63 (текущий 2.68).

1 голос
/ 15 сентября 2011

Ваша проблема в том, что $(hash libtoolize 2>&-) не имеет вывода, и поэтому строка интерпретируется как просто: if [ -eq 0 ]

Код возврата команды доступен через $?, поэтому вы можете сделать:

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

Тем не менее, вы могли бы также сделать это:

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