Ist es möglich, bash in OSX Yosemite tatsächlich auf Version 4.0 zu aktualisieren?
echo $BASH_VERSION
3.2.57(1)-release
Dieser Artikel und dieser Thread beziehen sich auf dieselbe Frage, aber sie installieren eine neue Shell neben der alten. Gibt es eine Möglichkeit, die alte Bash-Shell direkt zu aktualisieren?
macos
terminal
bash
command-line
Schleusen
quelle
quelle
Antworten:
Apple wird Bash nicht aktualisieren, da die neueste Version unter der GPLv3 lizenziert ist, die Apple nicht verwenden kann. Sie haben jedoch die meisten ihrer anderen Shells aktualisiert. ZSH zum Beispiel ist meistens auf dem neuesten Stand.
Verweise:
Nach einigem Nachforschen scheint dies das Hauptproblem zu sein:
Dies würde erfordern, dass ansonsten Closed-Source-Software ihre GPL-Anteile von der Öffentlichkeit modifizierbar macht, was offensichtlich ein Problem für Apple wäre.
quelle
bash
. Die "Tivoization" -Klausel könnte erklären, warum ein Updatebash
beispielsweise auf einem Apple TV nicht möglich ist, auf einem Desktop-Mac jedoch nicht. Darüber hinaus müssten bereits "GPL-Anteile" von der Öffentlichkeit modifizierbar gemacht werden. v3 würde das nicht ändern. Ich würde glauben, dass die Patentklausel von GPL v3 ausreichen würde, um Apple davon abzuhalten, GPL v3-Code zu berühren.Ist es möglich, bash in OSX Yosemite tatsächlich auf Version 4.0 zu aktualisieren? Ja.
Laden Sie Homebrew http://brew.sh/ herunter / installieren Sie es, indem Sie diesen Befehl im Terminal ausführen.
Beenden Sie das Terminal und öffnen Sie es erneut. dann tippe
Ändern Sie die Standard-Shell über die Terminal-GUI mit dem Literal-Pfad Ihrer neuen Bash (BEARBEITEN: Ich habe noch keinen CLI-Weg gefunden, der funktioniert)
Ist es möglich, Bash in OSX Yosemite tatsächlich auf die von Apple bereitgestellte Bash- Version 4.0 zu aktualisieren ?
EDIT: Nein. Nicht in der Art, wie der Op fragt. Aktualisieren Sie z. B. die aktuelle Installation, indem Sie sie selbst ersetzen. In anderen Antworten wurde festgestellt, dass Apple Bash aufgrund von Lizenzproblemen nicht aktualisiert hat. Für die meisten Dolmetscher ist es jedoch die kanonische Lösung, eine aktualisierte und separate Version von bash herunterzuladen und als Standard-Shell zu verwenden. Nehmen wir zum Beispiel Python. Sie aktualisieren 2.7 nicht auf 3.5, sondern laden eine separate Version herunter und ändern Ihre Standardeinstellungen.
quelle
sudo chpass -s /usr/local/bin/bash
. Hinweis: Es ist am besten, auf den Symlink zu verweisen, damit/usr/local/bin/
Brew Upgrades durchführen kann, ohne die Umgebung jedes Mal ändern zu müssen.sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
Dannchsh -s /usr/local/bin/bash
wird die Standard-Shell für das Terminal festgelegtWie @William in seiner Antwort sagte, bietet Apple Bash 4 aufgrund von GPL-Einschränkungen nicht an. Sie können jedoch bash 4+ installieren und es auch zu Ihrer Standard-Shell machen (einschließlich für Terminal und iTerm2 ), indem Sie die folgenden Schritte ausführen .
Installieren Sie Bash 4 über Homebrew
Installieren Sie zuerst die neuere Version von bash. Dafür gibt es verschiedene Möglichkeiten, ich bevorzuge Homebrew.
brew install bash
.Bash 4 ist jetzt in Ihrem PATH verfügbar (vorausgesetzt, der Homebrew-Bin ist auf Ihrem Weg). Es ist jedoch noch nicht Ihre Standard-Shell. Sie können herausfinden, wo es sich befindet, indem Sie ausführen
which bash
. In meinem Fall ist es bei/usr/local/bin/bash
.Verwenden von Bash 4
Da es sich auf Ihrem PATH befindet, können Sie eine Bash 4-Sitzung mit nur starten
bash
oder es kann in Skripten mit einem Shebang verwendet werden .Dies wird beispielsweise eine bestimmte Bash-Instanz verwenden.
Dies wird die erste Bash auf dem Pfad verwenden.
Sie können den Bash-Pfad auch für bestimmte Profile in Terminal / iTerm2 festlegen, indem Sie die in der Antwort von @ user136952 beschriebenen Schritte ausführen.
Bash 4 als Standard festlegen
Wie oben erwähnt, ist Bash 4 nach der Installation immer noch nicht die Standard-Shell. Um Bash zur Standardeinstellung zu machen, müssen Sie zwei weitere Schritte ausführen.
Fügen Sie zunächst den Bash 4-Pfad zu Ihrer
/etc/shells
Datei hinzu, sodass es sich um eine zulässige Anmeldeshell handelt. Wie in / etc / shells beschrieben , enthält diese Datei die Liste der gültigen Login-Shells. Nach dem Hinzufügen des neuen Bash-Pfads/etc/shells
sieht es folgendermaßen aus:Als nächstes verwenden wir chsh, um es zu Ihrer Standard-Shell zu machen. Alle Sitzungen für diesen Benutzer verwenden diese Shell. Weitere Informationen hierzu finden Sie unter Ändern der Shell in Mac OS X Terminal . Der eigentliche Befehl ist jedoch sehr einfach.
Jetzt ist die neue Bash unsere Standard-Login-Shell. Wenn Sie Terminal oder iTerm2 öffnen und ausführen
bash --version
, sollte die neue Version angezeigt werden . Beachten Sie die "License GPLv3 +", weshalb Apple sie nicht mit macOS bündelt.quelle
sudo chpass -s /usr/local/bin/bash
meine Shell nur für root / sudo . Um meine reguläre Anmeldung zu ändern, muss ich den Befehl ohne ausführensudo
. Dies kann eine Active Directory-Sache sein. Ich bin mir nicht sicher.#!/usr/local/bin/bash
Shebang zu benutzen, schauen Sie in using#!/usr/bin/env bash
( Erklärung ). Dadurch wird das Skript mit der Bash-Version ausgeführt, die von der Umgebung, die das Skript startet, erreichbar ist, dh mit der zurückgegebenen Versionwhich bash
. Diese Lösung ist portabler als die Verwendung bestimmter Pfade. Wir können nicht erwarten, dass andere Benutzer Bash über Homebrew installieren.Sie können eine andere Version von Bash ohne Homebrew installieren
Und folgen Sie den Schritten hier: https://gist.github.com/samnang/1759336
Laden Sie die gewünschte Bash-Version herunter und installieren Sie sie. Ersetzen Sie XX (in Bash-XX) durch die gewünschte Version, z. B. 4.4
Möglicherweise möchten Sie einen Alias hinzufügen, wenn der bash-Befehl diesen verwenden soll. Platzieren Sie in Ihrem ~ / .bash_profile
quelle
Die parallele Installation mit einem Update Ihrer Shell (über chsh oder die GUI) schlägt für Skripte fehl. Oft werden Skripte verwendet
env bash
, die auf die OS X-Bash-Version zurückgreifen. Was Sie also wollen, ist möglicherweise nicht das vollständige Update von bash, sondern eine Side-by-Side-Installation , die immer die neuere Version von bash zurückgibt (dh auch wenn sieenv
aufgerufen wird).Also, um damit umzugehen:
1) installiere bash via Homebrew, wie die anderen Kommentatoren geschrieben haben
2) stelle deine Login-Shell auf diese neue Version ein (über die GUI oder den Befehl chsh, wie andere geschrieben haben)
3) Setze
/usr/local/bin
(oder den Pfad zur neuen Bash-Version) vor/bin
deine $ PATH-Variable, indem du dies zu deinem hinzufügst~/.bash_profile
:export PATH=/usr/local/bin:$PATH
quelle
.bash_profile
sowieso nie aufgerufen, sodass es sich nur auf etwas auswirkt, das Sie direkt in einem Terminal ausführen.2019: So einfach wie in diesem Beitrag
dann tab ein neues terminal, viel spaß!
quelle