Відповіді:
Сам Баш буде здебільшого однаковий. Буде кілька невеликих відмінностей, але жодне з них не вплине на портативність ваших сценаріїв.
Основна проблема полягає в тому, що основні програми MacOS базуються на FreeBSD, тоді як утиліти, до яких ви звикли, швидше за все, є з проекту GNU. Основні програми FreeBSD не завжди сумісні з ядрами GNU. Існують відмінності між продуктивністю та поведінкою між версіями GNU та FreeBSD sed , grep , ps та іншими утилітами .
Ви можете встановити GNU coreutils, але вони мають g-
префікси (наприклад, gcat
для cat
). Це не дуже гарна ідея , щоб замінити MacOS Coreutils з GNU Coreutils.
Якщо це має значення, bash
на Mac OS X Mountain Lion все ще є версія 3.2. Більшість дистрибутивів Linux сьогодні постачається з 4.x, тому вам не вистачить функцій версії 4. Наразі версія 4.2.45 доступна на домашньому слові як спосіб вирішення. Я не знаю, яка версія в 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.