Bash w systemie Linux vs. Mac OS

27

Kupuję iMaca. Pracuję nad Linuksem od dłuższego czasu i wykonuję wiele skryptów bash. Zastanawiałem się, czy wszystkie polecenia i funkcje bash są dostępne w systemie Mac OS? Czy ktoś ma jakieś doświadczenie ze skryptami bash dla komputerów Mac? Doceniam twój wkład.

alex
źródło

Odpowiedzi:

32

Sam Bash będzie w większości taki sam. Będzie kilka drobnych różnic, ale żadna z nich nie wpłynie na przenośność twoich skryptów.

Głównym problemem jest to, że jądra systemu MacOS są oparte na FreeBSD, podczas gdy narzędzia, do których jesteś przyzwyczajony, pochodzą najprawdopodobniej z projektu GNU. Coreutils FreeBSD nie zawsze są kompatybilne z coreutils GNU. Istnieją różnice w wydajności i zachowaniu między wersjami GNU i FreeBSD programów sed , grep , ps i innych .

Możesz zainstalować jądra GNU, ale mają one g-prefiksy (np. gcatDla cat). Nie jest dobrym pomysłem zamiana rdzeni MacOS na jądra GNU.

Społeczność
źródło
6
Należy wzmocnić fakt, że korzystanie ze standardowych podstawowych narzędzi opartych na FreeBSD może wpływać na przenośność twoich skryptów (np. psMa różne flagi, jak to robi grep). Kilka razy uderzyłem się głową w ścianę, próbując dowiedzieć się, dlaczego mój skrypt Ubuntu nie generował tego samego wyniku na moim komputerze Mac.
Chris Gregg,
1
Jeśli chcesz napisać swoje skrypty, aby były przenośne, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp jest doskonałym miejscem do uzyskania ściśle standardowych specyfikacji dla narzędzi i poleceń POSIX i XCU.
kojiro
@ChrisGregg: Zgadzam się. Dodałem trochę do mojej odpowiedzi, aby podkreślić, że między tymi zestawami narzędzi istnieją niezgodności.
5

Jeśli to ważne, bashw systemie Mac OS X Mountain Lion jest nadal w wersji 3.2. Większość dystrybucji Linuksa jest obecnie dostarczana z wersją 4.x, więc nie będziesz mieć funkcji wersji 4. Obecnie wersja 4.2.45 jest dostępna w Homebrew jako obejście problemu. Nie wiem, która wersja jest w Mavericks, nie jestem pewien, czy ktoś, kto wie, może jeszcze powiedzieć.

Jak wspomniano przez innych, bashjest to samo bash(inne niż już wspomniane wersje), ale Mac OS X używa (głównie) przestrzeni użytkownika BSD. Wiele standardowych narzędzi systemowych ma nieco inne opcje lub zachowuje się nieco inaczej. Są niestety zbyt liczne, by je tutaj wymienić.

bahamat
źródło
2
4 lata później bash na High Sierra nadal używa: GNU bash, wersja 3.2.57 (1) - wydanie (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Nate Lockwood
4

Zainstaluj homebrew (menedżer pakietów), a następnie zainstaluj wersje GNU niektórych podstawowych narzędzi:

$ brew install coreutils
$ brew install gnu-sed

Po każdej instalacji pokaże kroki, które możesz wykonać, abyś mógł po prostu zadzwonić datezamiast gdatena przykład, abyś mógł nadal używać skryptów bash dla Linuksa bez żadnych modyfikacji.

Gratulacje, właśnie rozwiązałeś 99% problemów ze skryptami na różnych platformach.

Dziekan
źródło
3
Z drugiej strony, jeśli twoje skrypty rzeczywiście mają być przenośne, będziesz chciał je naprawić, a nie objawy.
tripleee
2

Jedną z rzeczy, które mogą frustrować przejście z Linuksa na komputer Mac, jest brak /procpseudo-systemu plików. To zepsuło wiele moich skryptów Linuksa i znalezienie odpowiedniego sposobu na umieszczenie tych samych informacji w procskrypcie bash na komputerze Mac może być trudne .

Chris Gregg
źródło
0

Jestem „głównie Linuksem, sporadycznie użytkownikiem Maca” i stwierdzam, że:

bash ~/.bashrci ~/.bash_aliasesprzeważnie działają tak samo.

Jednym z problemów, które znalazłem, było jedno z poleceń zmiany koloru, które nie działało na komputerze Mac. Na podstawie tych i innych doświadczeń nauczyłem się, aby okno terminalu było otwarte i zalogowane podczas konfigurowania mojego .bashrcpliku. To znaczy, że mogę przetestować „nowe okno” i znaleźć błędy w wciąż zalogowanym w jednym.

Michael Durrant
źródło