Ответы:
Сам 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.