Изменяет ли Darwin/MacOS Bash?
Мне интересно узнать о переносимости скриптов Bash, которые используют встроенные команды Bash.
Я понимаю, что каждый вкус UNIX имеет тенденцию изменять различные утилиты UNIX. Но как правило, они оставляют Bash и Bash встроенные модули самостоятельно? Что относительно MacOS в частности?
Ответы
Ответ 1
Apple использует довольно старую версию Bash, поскольку они не отправляют код, лицензированный под GPL3. Вы можете загрузить текущую версию с сайта с открытым исходным кодом Apple и посмотреть, что она по крайней мере претендует на ваниль Bash 3.2 (хотя, очевидно, Xcode проект добавлен).
Ответ 2
Насколько я знаю, bash не изменен в Mac OS X (помимо небольших настроек, необходимых для его компиляции, вы можете просмотреть источник на http://opensource.apple.com/), а скрипты должны быть довольно портативными.
Как отмечают Грэхем Ли и Гордон Дэвиссон, Mac OS X поставляется с более старыми версиями, и существуют различия между поддерживаемыми версиями. bash 4 имеет ассоциативные массивы и другие изменения. bash 3 включает регулярное выражение (и, возможно, другие, которые я не искал). Не помню различия bash 2, возможно, некоторые различия в брекетингах/условных тестах?
Mac OS X 10.7.x Lion включает bash 3.2.x. Я не помню точные версии с верхней части головы, но Mac OS X 10.6.x Snow Leopard и 10.5.x Leopard включают bash 3.x. Mac OS X 10.4.x Tiger и ранее использовали bash 2.0.5. Таким образом, вы определенно столкнетесь с различиями между тем, что поддерживается по умолчанию.
Естественно, помимо различий между наборами функций и встроенных модулей для разных версий bash
в Mac OS X вы также найдете различия в других инструментах. Например, есть проблемы с getopt
в Mac OS X (пробелы, которые часто встречаются в каталогах/файлах Mac OS X, не поддерживаются в аргументах, встроенные версии getopts
в новых bash
могут помочь с этим, но может быть недоступен в более старых версиях). Естественно, будут и другие инструменты, которые имеют разные функциональные возможности и синтаксисы.
Я определенно не эксперт bash
, но я написал несколько скриптов Mac OS X, поддерживающих различные версии. См. Мои Регулярные выражения в статье bash и альтернативы для обсуждения функций регулярного выражения 2.x vs 3.x и обходных решений. Или некоторые из моих сценариев bash
, которые в значительной степени восприняли Mac OS X: tools-osx и bash_stub.
Ответ 3
bash версия 4 не отправляется на Дарвин или MacOS Lion.
поэтому mac не поддерживает улучшения команды чтения и т.д., что является неудачным.
cygwin имеет bash 4.1.10