autoconf, использующий sh, мне нужен SHELL=BASH, как я вынуждаю autoconf использовать удар?

Не могли бы вы иметь более двух разделителей в будущем? Если это так, попробуйте этот XSLT, который можно легко расширить, чтобы иметь больше разделителей (одного символа). Просто измените параметры delimiters в шаблоне ConvertXmlStyleToCamelCase.


    

    
        
            
        
    

    
        
            
        
    

    
        
        

        
        
        
        

        Next delimiter is 

        
        

        
            
            
                
                  
            
        
    

См. В действии на http://xsltfiddle.liberty-development.net/gWvjQeR , где я использовал третий разделитель в качестве примера.

Что касается двойного перевода, цель этого состоит в том, чтобы найти следующий разделитель в строке. Для этого (в XSLT 1.0) вам необходимо удалить все символы, которые не являются разделителями. Выполнение translate($text, $delimiters, '') удаляет все разделители и возвращает все символы, которые не являются разделителями. Если вы затем примените этот результат к исходной строке, у вас останутся только разделители. Первый символ будет следующим разделителем.

8
задан Bernard 2 October 2008 в 06:41
поделиться

4 ответа

У меня есть подобные проблемы на Солярисе с GCC - и я использую 'стандартную' технику:

CONFIG_SHELL=/bin/bash ./configure ...

(Или на самом деле я использую/bin/ksh, но установка огибающего var CONFIG_SHELL позволяет Вам говорить autoconf сценарии, которые окружают для использования.)

Я проверил настраивать сценарий на мерзавца и gd (они, оказалось, были извлечены) проверять, что это не было специфическим огибающим var GCC.

8
ответ дан 5 December 2019 в 17:43
поделиться

Где SHELL устанавливает на это? Что выполняется с/bin/sh, когда Вы хотите/bin/bash?

настройте сценарии, предназначены для выполнения куда угодно, даже на ужасно поврежденный и оболочки не-Bash, которые существуют в дикой природе.

Править: Какова точно проблема?

Другое редактирование: Возможно, Вы хотели бы, чтобы сценарий повторно выполнил себя, что-то вроде этого. Это - вероятно, багги:

if test "$SHELL" = "/bin/sh" && test -x /bin/bash; then
    exec /bin/bash -c "$0" "$@"
fi
0
ответ дан 5 December 2019 в 17:43
поделиться

ln -f /bin/bash /bin/sh

:-P (Нет, это не серьезный ответ. Не поливайте из шланга свою систему путем выполнения его!)

-4
ответ дан 5 December 2019 в 17:43
поделиться

В чем заключаются «огромные проблемы»? autoconf очень усердно работает над созданием скрипта настройки, который работает с очень большим процентом оболочек. Если у вас есть пример конструкции, которую пишет autoconf, которая не является переносимой, сообщите об этом в список рассылки autoconf. С другой стороны, если проблемы, с которыми вы столкнулись, являются результатом того, что ваш собственный код оболочки в configure.ac не является переносимым (например, вы используете bashisms), то решение состоит в том, чтобы либо прекратить использование непереносимого кода, либо потребовать пользователь должен явно установить SHELL или CONFIG_SHELL во время настройки.

Похоже, проблема, с которой вы столкнулись, заключается в среде пользователя, запускающего configure. В Linux у вашего пользователя SHELL установлен в / bin / bash, но в OS X он установлен в / bin / sh. Сценарий configure, сгенерированный autoconf, выполняет некоторые начальные тесты оболочки, в которой он запущен, и пытается повторно запустить себя с использованием другой оболочки, если предоставленной оболочке отсутствуют определенные функции. Однако, если вы вводите непереносимый код оболочки в configure.ac, вы нарушаете одну из основных философий autoconf, а именно, что скрипты configure должны быть переносимыми. Если вы действительно хотите использовать bashisms в вашем коде оболочки, то вам необходимо, чтобы ваш пользователь передавал SHELL = / bin / bash в качестве аргумента скрипту настройки. Это не ошибка autoconf, но многие сочтут это ошибкой в ​​сборке вашего проекта.

если вы вводите непереносимый код оболочки в configure.ac, то вы нарушаете одну из основных философий autoconf, а именно, что скрипты configure должны быть переносимыми. Если вы действительно хотите использовать bashisms в вашем коде оболочки, то вам необходимо, чтобы ваш пользователь передавал SHELL = / bin / bash в качестве аргумента скрипту настройки. Это не ошибка autoconf, но многие сочтут это ошибкой в ​​сборке вашего проекта.

если вы вводите непереносимый код оболочки в configure.ac, то вы нарушаете одну из основных философий autoconf, а именно, что скрипты configure должны быть переносимыми. Если вы действительно хотите использовать bashisms в своем коде оболочки, тогда вам необходимо, чтобы ваш пользователь передавал SHELL = / bin / bash в качестве аргумента сценария настройки. Это не ошибка autoconf, но многие сочтут это ошибкой в ​​сборке вашего проекта.

4
ответ дан 5 December 2019 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: