Bash в Linux проти Mac OS


27

Я купую iMac. Я працюю над Linux довгий час, і я роблю купу сценаріїв. Мені було цікаво, чи всі команди bash та функції доступні на Mac OS? Хтось має досвід роботи з сценарієм Mac bash? Я ціную ваш внесок.

Відповіді:


32

Сам Баш буде здебільшого однаковий. Буде кілька невеликих відмінностей, але жодне з них не вплине на портативність ваших сценаріїв.

Основна проблема полягає в тому, що основні програми MacOS базуються на FreeBSD, тоді як утиліти, до яких ви звикли, швидше за все, є з проекту GNU. Основні програми FreeBSD не завжди сумісні з ядрами GNU. Існують відмінності між продуктивністю та поведінкою між версіями GNU та FreeBSD sed , grep , ps та іншими утилітами .

Ви можете встановити 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.
kojiro

@ChrisGregg: Я згоден. Я трохи доповнив свою відповідь наголосом, що між двома наборами інструментів є несумісності.

5

Якщо це має значення, bashна Mac OS X Mountain Lion все ще є версія 3.2. Більшість дистрибутивів Linux сьогодні постачається з 4.x, тому вам не вистачить функцій версії 4. Наразі версія 4.2.45 доступна на домашньому слові як спосіб вирішення. Я не знаю, яка версія в Mavericks, я не впевнений, що хтось, хто знає, ще може сказати.

Як зазначають інші, bashте саме bash(крім вже відзначених версій), але Mac OS X використовує (здебільшого) BSD користувальницьку область. Багато стандартних системних утиліт мають дещо різні варіанти або поводяться дещо інакше. На жаль, їх тут занадто багато, щоб їх перелічити.


2
4 роки потому баш на Високій Сьєррі все ще використовується: GNU bash, версія 3.2.57 (1) -випуск (x86_64-apple-darwin17) Copyright (C) 2007 Free Free Foundation 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файлу. Це було те, що я можу протестувати «нове вікно» і знайти будь-які помилки у ще ввійшли в одному.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.