Bash in Linux gegen Mac OS

27

Ich kaufe einen iMac. Ich arbeite schon seit langer Zeit an Linux und mache ein paar Bash-Skripte. Ich habe mich gefragt, ob alle Bash-Befehle und -Funktionen unter Mac OS verfügbar sind. Hat jemand Erfahrung mit Mac Bash Scripting? Ich schätze Ihre Eingabe.

Alex
quelle

Antworten:

32

Bash selbst wird meistens gleich sein. Es wird ein paar kleine Unterschiede geben , von denen jedoch keiner die Portabilität Ihrer Skripte beeinträchtigt.

Das Hauptproblem ist, dass die MacOS-Coreutils auf FreeBSD basieren, während die Dienstprogramme, die Sie gewohnt sind, höchstwahrscheinlich aus dem GNU-Projekt stammen. Die FreeBSD-Coreutils sind nicht immer mit den GNU-Coreutils kompatibel. Es gibt Leistungs- und Verhaltensunterschiede zwischen den GNU- und FreeBSD-Versionen von sed , grep , ps und anderen Dienstprogrammen .

Sie können die GNU-Coreutils installieren, sie haben jedoch g-Präfixe (z . B. gcatfür cat). Es ist keine gute Idee , die MacOS-Coreutils durch die GNU-Coreutils zu ersetzen.

Gemeinschaft
quelle
6
Es sollte noch verstärkt werden, dass die Verwendung der standardmäßigen FreeBSD-basierten Kerndienstprogramme die Portabilität Ihrer Skripte beeinträchtigen kann (z. B. psunterschiedliche Flags, wie dies der Fall ist grep). Ich habe ein paarmal meinen Kopf gegen die Wand gestoßen, um herauszufinden, warum mein Ubuntu-Skript auf meinem Mac nicht die gleiche Ausgabe lieferte.
Chris Gregg
1
Wenn Sie Ihre Skripte so schreiben möchten, dass sie portabel sind, können Sie unter www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp die Standardspezifikationen für POSIX- und XCU-Dienstprogramme und -Befehle abrufen.
Kojiro
@ ChrisGregg: Ich stimme zu. Ich habe meiner Antwort ein wenig hinzugefügt, um hervorzuheben, dass es Inkompatibilitäten zwischen den beiden Werkzeugsätzen gibt.
5

Wenn es darauf ankommt, ist bashunter Mac OS X Mountain Lion noch Version 3.2. Die meisten Linux-Distributionen werden heutzutage mit 4.x ausgeliefert, sodass Ihnen die Funktionen von Version 4 fehlen. Gegenwärtig ist Version 4.2.45 von Homebrew verfügbar, um dieses Problem zu umgehen. Ich weiß nicht, welche Version in Mavericks ist, ich bin nicht sicher, ob jemand, der es weiß, es noch sagen darf.

Wie von anderen erwähnt, bashist es dasselbe bash(mit Ausnahme der bereits erwähnten Versionen), aber Mac OS X verwendet ein (meistens) BSD-Benutzerland. Viele der Standard-Systemdienstprogramme haben geringfügig unterschiedliche Optionen oder verhalten sich geringfügig anders. Sie sind leider zu zahlreich, um sie hier aufzulisten.

Bahamat
quelle
2
4 Jahre später bash auf High Sierra ist nach wie vor mit: GNU bash, Version 3.2.57 (1) -release (x86_64-Apfel-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Nate Lockwood
4

Installiere homebrew (einen Paketmanager) und installiere dann die Gnu-Versionen einiger grundlegender Dienstprogramme:

$ brew install coreutils
$ brew install gnu-sed

Nach jeder Installation werden die Schritte angezeigt, die Sie ausführen können, damit Sie datestatt gdatebeispielsweise einfach aufrufen können , damit Sie Ihre Linux-Bash-Skripte weiterhin ohne Änderungen verwenden können.

Glückwunsch, Sie haben gerade 99% Ihrer plattformübergreifenden Skriptprobleme gelöst.

Dean
quelle
3
Wenn Ihre Skripte jedoch tatsächlich portabel sein sollen, sollten Sie die Skripte und nicht die Symptome beheben.
Tripleee
2

Eine Sache, die frustrierend sein kann, wenn man von Linux auf einen Mac kommt, ist, dass es kein /procPseudo-Dateisystem gibt. Dies hat eine Reihe meiner Linux-Skripte beschädigt, und es kann schwierig sein, geeignete Methoden zu finden, um dieselben Informationen wie procin Ihrem Mac-Bash-Skript zu erhalten.

Chris Gregg
quelle
0

Ich bin ein "hauptsächlich Linux, gelegentlicher Mac" -Nutzer und finde Folgendes:

bash, ~/.bashrcund ~/.bash_aliasesmeist gleich arbeiten.

Ein Problem, das ich festgestellt habe, war, dass einer der Befehle zum Ändern der Farbaufforderung auf dem Mac nicht funktioniert hat. Aufgrund dieser und anderer Erfahrungen habe ich gelernt, ein Terminalfenster offen zu halten und mich beim Einrichten meiner .bashrcDatei anzumelden. Das war ich kann 'neues fenster' testen und eventuelle fehler im noch eingeloggten finden.

Michael Durrant
quelle