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 Seite an Seite mit der alten. Gibt es eine Möglichkeit, die alte Bash-Shell direkt zu aktualisieren?
Apple wird Bash nicht aktualisieren, da die neueste Version unter GPLv3 lizenziert ist, die Apple nicht verwenden kann. Sie haben jedoch die meisten ihrer anderen Shells aktualisiert. ZSH zum Beispiel ist größtenteils auf dem neuesten Stand.
Verweise:
Nach ein wenig Recherche scheint dies das Hauptproblem zu sein:
Wenn Personen Benutzerprodukte vertreiben, die Software unter GPLv3 enthalten, verlangt Abschnitt 6, dass sie Ihnen Informationen zur Verfügung stellen, die zum Ändern dieser Software erforderlich sind. Benutzerprodukte ist ein in der Lizenz speziell definierter Begriff; Beispiele für Benutzerprodukte sind tragbare Musikplayer, digitale Videorecorder und Heimsicherheitssysteme.
Dies würde erfordern, dass ansonsten Closed-Source-Software ihre GPL-geschützten Teile von der Öffentlichkeit modifizierbar gemacht werden, was offensichtlich ein Problem für Apple wäre.
bash
. Die „Tivoization“-Klausel könnte erklären, warum bash
beispielsweise auf einem Apple TV nicht aktualisiert werden kann, aber nicht wirklich auf einem Desktop-Mac. Darüber hinaus müssten bereits "GPL-Teile" von der Öffentlichkeit modifizierbar gemacht werden; v3 würde daran nichts ändern. Ich würde glauben , dass die Patentklausel von GPL v3 ausreichen würde, um Apple davon abzuhalten, den GPL v3-Code anzufassen.Wie @William in seiner Antwort sagte, bietet Apple aufgrund von GPL-Einschränkungen kein bash 4 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 wie folgt vorgehen.
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 auf Ihrem PATH verfügbar (vorausgesetzt, der Homebrew-Bin befindet sich auf Ihrem Pfad). 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
.
Da es sich auf Ihrem PATH befindet, können Sie eine Bash 4-Sitzung mit just starten bash
oder es kann in Skripten verwendet werden, indem Sie ein Shebang verwenden .
Dies verwendet beispielsweise eine bestimmte Bash-Instanz.
#!/usr/local/bin/bash
...your script...
Dies wird die erste Bash auf dem PATH verwenden.
#!/usr/bin/env bash
...your script...
Sie können auch den Bash-Pfad für bestimmte Profile in Terminal/iTerm2 festlegen, indem Sie die in der Antwort von @ user136952 beschriebenen Schritte verwenden.
Wie oben erwähnt, ist Bash 4 nach der Installation immer noch nicht die Standard-Shell. Um bash zum Standard zu machen, müssen Sie zwei weitere Schritte ausführen.
Fügen Sie zuerst den Bash 4-Pfad zu Ihrer /etc/shells
Datei hinzu, damit es sich um eine zulässige Anmelde-Shell handelt. Wie in /etc/shells beschrieben , enthält diese Datei die Liste gültiger Login-Shells. Nach dem Hinzufügen des neuen Bash-Pfads /etc/shells
sieht mein wie folgt aus:
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash
Als nächstes verwenden wir chsh, um es zu Ihrer Standard-Shell zu machen. Daher verwenden alle Sitzungen für diesen Benutzer diese Shell. Sie können mehr darüber in Change the Shell in Mac OS X Terminal lesen , aber der eigentliche Befehl ist sehr einfach.
chsh -s /usr/local/bin/bash
Jetzt ist die neue Bash unsere Standard-Login-Shell. Wenn Sie Terminal oder iTerm2 öffnen und ausführen bash --version
, sollten Sie die neue Version sehen. Beachten Sie die „Lizenz GPLv3+“, weshalb Apple sie nicht mit macOS bündelt.
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
sudo chpass -s /usr/local/bin/bash
meine Shell nur für root/sudo. Um zu meiner regulären Anmeldung zu wechseln, muss ich den Befehl ohne ausführen sudo
. Dies könnte eine Sache von Active Directory sein; Ich bin mir nicht sicher.#!/usr/local/bin/bash
Shebang zu verwenden, schauen Sie sich die Verwendung von #!/usr/bin/env bash
( Erklärung ) an. Dadurch wird das Skript mit jeder Version von Bash ausgeführt, die von der Umgebung, die das Skript startet, erreichbar ist, dh was auch immer zurückgegeben wird which bash
. Es ist eine tragbarere Lösung als die Verwendung bestimmter Pfade. Wir können nicht erwarten, dass andere Benutzer Bash über Homebrew installieren.env
Methode, weil sie es einfacher macht, Skripte zwischen macOS und Linux wiederzuverwenden, zB zwischen Host und VMs.chsh
war der entscheidende fehlende Schritt für mich. Danke schön.brew install bash
der Befehl für die meisten Leute nach , which bash
einfach auf die standardmäßig in macOS installierte Bash 3.4-Version verweisen, nicht auf die Version, die Sie gerade mit Homebrew installiert haben./usr/
. Das Ausführen sudo
und Bearbeiten /etc/shells
scheint fehl am Platz zu sein, es wäre, als würden Sie /etc/paths
alle Ihre ausführbaren Dateien direkt bearbeiten, anstatt $PATH
in Ihrer .bashrc
.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.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Beenden Sie Ihr Terminal und öffnen Sie es erneut. dann tippen
brew install bash
Ändern Sie die Standard-Shell über die Terminal-GUI mit dem wörtlichen Pfad Ihrer neuen Bash (BEARBEITEN: Ich muss noch einen CLI-Weg finden, der funktioniert)
Ist es möglich, Bash tatsächlich auf die von Apple bereitgestellte Bash- Version 4.0 in OSX Yosemite zu aktualisieren?
EDIT: Nein. Nicht so, wie der Op fragt. Aktualisieren Sie beispielsweise die aktuelle Installation, indem Sie sich selbst ersetzen. In anderen Antworten wurde darauf hingewiesen, dass Apple bash aufgrund von Lizenzproblemen nicht aktualisiert hat. Das Herunterladen einer aktualisierten und separaten Version von bash und deren Verwendung als Standard-Shell ist jedoch für die meisten Interpreter die kanonische Lösung. Nehmen Sie zum Beispiel Python. Sie aktualisieren 2.7 nicht auf 3.5, sondern laden eine separate Version herunter und ändern Ihre Standardeinstellung.
sudo chpass -s /usr/local/bin/bash
. Hinweis: Es ist am besten, auf den Symlink zu zeigen /usr/local/bin/
, damit Brew Upgrades verarbeiten kann, ohne jedes Mal Ihre Umgebung ändern zu müssen.sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
Dann chsh -s /usr/local/bin/bash
wird die Standard-Shell für das Terminal festgelegtbash
zu installieren, /usr/local/bin/bash
da es das System in /bin/bash
Ruhe lässt. Daher bleiben alle Systemabhängigkeiten bash 3
erhalten.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, zB 4.4
curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz tar xzf bash-X.X.tar.gz cd bash-X.X ./configure --prefix=/usr/local && make && sudo make install
Fügen Sie die neue Shell zur Liste der legitimen Shells hinzu
sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"
Ändern Sie die Shell für den Benutzer
chsh -s /usr/local/bin/bash
Suchen Sie nach Bash 4 und /usr/local/bin/bash...
echo $BASH && echo $BASH_VERSION
Möglicherweise möchten Sie einen Alias hinzufügen, wenn Sie möchten, dass der Bash-Befehl ihn verwendet. Platzieren Sie es in Ihrem ~/.bash_profile
alias bash="/usr/local/bin/bash"
/bin/bash
? Liegt es daran, dass es für die Kompatibilität mit anderer "antiker" Software benötigt wird, die Apple in MacOS vertreibt?/usr/local
. Wenn Sie sie lieber in einem bash-X.X
Verzeichnis organisiert haben möchten, hängen Sie /bash-X.X
sie an den Präfixparameter im ./configure
Befehl an./bin
Verzeichnis nicht ändern, es sei denn, Sie deaktivieren SIP
.Die parallele Installation mit einem Update Ihrer Shell (über chsh oder die GUI) schlägt für Skripte fehl. Skripte verwenden häufig env bash
, das auf die Bash-Version von OS X zurückgreift. Was Sie also wollen, ist möglicherweise nicht die vollständige Aktualisierung von bash, sondern eine parallele Installation , die immer die neuere Version von bash zurückgibt (dh selbst wenn sie env
aufgerufen wird).
Also, um damit umzugehen:
1) Bash über Homebrew installieren, wie die anderen Kommentatoren gepostet haben
2) Stellen Sie Ihre Login-Shell auf diese neue Version ein (über die GUI oder den Befehl chsh, wie andere gepostet haben)
3) Setzen Sie /usr/local/bin
(oder den Pfad zur neuen Bash-Version) vor /bin
Ihre $PATH-Variable, indem Sie dies zu Ihrem hinzufügen ~/.bash_profile
:export PATH=/usr/local/bin:$PATH
.bash_profile
sowieso nie aufgerufen, sodass es sich nur auf etwas auswirkt, das Sie sowieso direkt in einem Terminal ausführen.2019: So einfach wie in diesem Beitrag
$ brew install bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ chsh -s /usr/local/bin/bash
dann tab ein neues Terminal, viel Spaß!
Für M1-Macs -
Sie können bash aktualisieren, indem Sie Folgendes tun
brew install bash
vorausgesetzt, Sie haben bereits Homebrew. Dadurch wird die neueste Version von bash installiert. Sie können Ihre Installation überprüfen, indem Sie Folgendes ausführen:
brew info bash
Um die Shell zu aktualisieren, starten Sie einfach das Terminal neu und überprüfen Sie die Version von bash mit -
bash --version
Hoffe das hilft.
Lupinen
Benutzer3439894
Prime624
Jason S