Ответы:
Сам Bash будет в основном таким же. Будет несколько небольших отличий, но ни одно из них не повлияет на переносимость ваших скриптов.
Основная проблема заключается в том, что coreutils для MacOS основаны на FreeBSD, в то время как утилиты, к которым вы привыкли, наиболее вероятны из проекта GNU. Coreutils FreeBSD не всегда совместимы с coreutils GNU. Существуют различия в производительности и поведении между версиями sed , grep , ps и других утилит GNU и FreeBSD .
Вы можете установить GNU coreutils, но у них есть g-префиксы (например, gcatдля cat). Это не очень хорошая идея , чтобы заменить MacOS Coreutils с GNU Coreutils.
Если это имеет значение, bashна Mac OS X Mountain Lion по-прежнему версия 3.2. Большинство дистрибутивов Linux в настоящее время поставляются с 4.x, поэтому вам не хватит версии 4. В настоящее время версия 4.2.45 доступна от Homebrew в качестве обходного пути. Я не знаю, какая версия есть в Mavericks, я не уверен, что кому-то, кто знает, разрешено говорить.
Как уже упоминалось другими, bashэто то же самое bash(кроме уже отмеченных версий), но Mac OS X использует (в основном) BSD. Многие из стандартных системных утилит имеют несколько разные параметры или ведут себя немного иначе. Их, к сожалению, слишком много, чтобы перечислять здесь.
Установите homebrew (менеджер пакетов), затем установите версии GNU некоторых основных утилит:
$ brew install coreutils
$ brew install gnu-sed
После каждой установки будут отображаться шаги, которые вы можете выполнить, чтобы вы могли просто вызывать dateих, gdateнапример, вместо того , чтобы вы все еще могли использовать свои сценарии Linux bash без каких-либо изменений.
Поздравляем, вы только что решили 99% проблем межплатформенного скриптинга.
Одна вещь, которая может расстраивать переход с Linux на Mac, - это отсутствие /procпсевдофайловой системы. Это сломало ряд моих сценариев Linux, и может быть непросто найти подходящие способы получить ту же информацию, что и procв вашем скрипте Mac bash.
Я «в основном Linux, иногда Mac», и я считаю, что:
Баш, ~/.bashrcи в ~/.bash_aliasesосновном работают одинаково.
Одна проблема, которую я обнаружил, заключалась в том, что одна из команд изменения цвета не работала на Mac. Из этого и другого опыта я научился держать окно терминала открытым и входить в систему при настройке моего .bashrcфайла. Это было то, что я могу проверить «новое окно» и найти любые ошибки во все еще зарегистрированном.
psимеет разные флаги, как иgrep). Я несколько раз ударился головой о стену, пытаясь понять, почему мой скрипт Ubuntu не выдает такой же результат на моем Mac.