Bash в Linux против Mac OS

27

Я покупаю IMAC. Я давно работаю над Linux и занимаюсь сценариями bash. Мне было интересно, все ли команды и функции bash доступны в Mac OS? У кого-нибудь есть опыт работы со скриптами для Mac bash? Я ценю ваш вклад.

Алекс
источник

Ответы:

32

Сам Bash будет в основном таким же. Будет несколько небольших отличий, но ни одно из них не повлияет на переносимость ваших скриптов.

Основная проблема заключается в том, что coreutils для MacOS основаны на FreeBSD, в то время как утилиты, к которым вы привыкли, наиболее вероятны из проекта GNU. Coreutils FreeBSD не всегда совместимы с coreutils GNU. Существуют различия в производительности и поведении между версиями sed , grep , ps и других утилит GNU и FreeBSD .

Вы можете установить GNU coreutils, но у них есть g-префиксы (например, gcatдля cat). Это не очень хорошая идея , чтобы заменить MacOS Coreutils с GNU Coreutils.

Сообщество
источник
6
Следует подчеркнуть, что использование стандартных базовых утилит на основе FreeBSD может повлиять на переносимость ваших скриптов (например, psимеет разные флаги, как и grep). Я несколько раз ударился головой о стену, пытаясь понять, почему мой скрипт Ubuntu не выдает такой же результат на моем Mac.
Крис Грегг
1
Если вы хотите, чтобы ваши сценарии были переносимыми, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp - это отличное место для получения строго стандартных спецификаций для утилит и команд POSIX и XCU.
Кодзиро
@ChrisGregg: я согласен. Я добавил немного в свой ответ, чтобы подчеркнуть, что между двумя наборами инструментов есть несовместимости.
5

Если это имеет значение, bashна Mac OS X Mountain Lion по-прежнему версия 3.2. Большинство дистрибутивов Linux в настоящее время поставляются с 4.x, поэтому вам не хватит версии 4. В настоящее время версия 4.2.45 доступна от Homebrew в качестве обходного пути. Я не знаю, какая версия есть в Mavericks, я не уверен, что кому-то, кто знает, разрешено говорить.

Как уже упоминалось другими, bashэто то же самое bash(кроме уже отмеченных версий), но Mac OS X использует (в основном) BSD. Многие из стандартных системных утилит имеют несколько разные параметры или ведут себя немного иначе. Их, к сожалению, слишком много, чтобы перечислять здесь.

bahamat
источник
2
Спустя 4 года bash на High Sierra все еще использует: GNU bash, версия 3.2.57 (1) -релиз (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Нейт Локвуд,
4

Установите homebrew (менеджер пакетов), затем установите версии GNU некоторых основных утилит:

$ brew install coreutils
$ brew install gnu-sed

После каждой установки будут отображаться шаги, которые вы можете выполнить, чтобы вы могли просто вызывать dateих, gdateнапример, вместо того , чтобы вы все еще могли использовать свои сценарии Linux bash без каких-либо изменений.

Поздравляем, вы только что решили 99% проблем межплатформенного скриптинга.

декан
источник
3
С другой стороны, если ваши сценарии действительно должны быть переносимыми, вам нужно исправить сценарии, а не симптомы.
tripleee
2

Одна вещь, которая может расстраивать переход с Linux на Mac, - это отсутствие /procпсевдофайловой системы. Это сломало ряд моих сценариев Linux, и может быть непросто найти подходящие способы получить ту же информацию, что и procв вашем скрипте Mac bash.

Крис Грегг
источник
0

Я «в основном Linux, иногда Mac», и я считаю, что:

Баш, ~/.bashrcи в ~/.bash_aliasesосновном работают одинаково.

Одна проблема, которую я обнаружил, заключалась в том, что одна из команд изменения цвета не работала на Mac. Из этого и другого опыта я научился держать окно терминала открытым и входить в систему при настройке моего .bashrcфайла. Это было то, что я могу проверить «новое окно» и найти любые ошибки во все еще зарегистрированном.

Майкл Даррант
источник