Ist es sicher, Bash über Homebrew zu aktualisieren?


81

Ich bin neu in OS X. Ich verwende OS X Lion auf einem MacBook Pro. Ist es sicher, die Bash-Shell mit Homebrew zu aktualisieren:

$ brew install bash

Wie mache ich es, wenn es sicher ist, zur Standardinstanz der Shell, die ich über Terminal ausführe?

Vielen Dank!


2
Diese Frage ist plötzlich sehr aktuell geworden, siehe Shellshock
ecnepsnai

Ja. 10 Zeichen
shrx

Antworten:


105

Binärdateien in /{,usr/}{,s}bin/sollten normalerweise nicht durch andere Dateien ersetzt werden. Andere Programme erwarten, dass es sich um die Versionen handelt, die mit OS X geliefert wurden, und sie werden durch Betriebssystem-Upgrades ersetzt.

Nach dem Ausführen brew install bashkönnen Sie die Standard-Shell sicher ändern, indem Sie:

  • Hinzufügen /usr/local/bin/bashzu/etc/shells
  • Laufen chsh -s /usr/local/bin/bash.

Einstellungen in Terminal oder iTerm 2 müssen normalerweise nicht geändert werden. Beide öffnen standardmäßig neue Fenster mit einer Anmeldeshell der Standardshell.

Die Standard-Shell kann auch in den Systemeinstellungen oder mit dscl geändert werden, aber alle drei Optionen können nur geändert werden /var/db/dslocal/nodes/Default/users/$USER.plist.


Sieht so aus, als hätte es funktioniert, und wenn ich Probleme habe, sollte es einfach sein, ein Rollback durchzuführen! Vielen Dank!
Rudy

Ich wusste nicht, dass die erweiterte Optionsseite vorhanden ist. Süss!
Lemonginger

2
Das bisschen über die Bearbeitung /etc/shells, um die installierte Bash einzuschließen, ist erforderlich. Andernfalls (zumindest auf meinem Computer) lehnt das Terminal den Start ab.
brendanjerwin

2
Der dritte Befehl (csh -s) scheint in Mavericks 10.9.2 nicht mehr erforderlich zu sein.
Brent Faust

2
Ich musste nur brew install bashdafür arbeiten. (dh musste nicht geändert werden /etc/shells)
Daniel

4

Ich könnte hier falsch liegen, aber soweit ich weiß, brewwürde es eine eigene Instanz von installieren bash, da /usr/local/binBrew unter /bin(und /usr/bin) funktioniert, während das System standardmäßig unter (und ) funktioniert .

Über Terminal können Sie Shells mit Ihrem eigenen benutzerdefinierten Befehl öffnen. Gehen Sie zu Preferences> Startup und wählen Sie Shells open with: Command (vollständiger Pfad) . bashGeben Sie einfach den Pfad zu Ihrem neuen und vuala!

Ich hoffe es hilft!

Übrigens: Backup! Bester Rat in diesen Situationen!


Hey, weißt du was, diese Antwort funktioniert tatsächlich wie ein Zauber
Castiel

0

Sichern Sie Ihre aktuelle Datei, bevor Sie etwas tun (natürlich, aber verdient es immer, gesagt zu werden).

sudo cp /bin/bash /bin/bash.3.2.bk

Erstellen Sie dann einen Symlink zu der Bash-Programmdatei, die Homebrew heruntergeladen hat. Ich denke, es wird so in / usr / local / Cellar sein

sudo ln -s /usr/local/Cellar/bash/4.2.10/bin/bash /bin/bash

Jetzt zeigt / bin / bash auf die Datei in Ihrem Verzeichnis usr / local


3
Der Nachteil des Hinzufügens einer neuen Bash für die Systemversion ist, dass jedes Update des Betriebssystems Ihre bevorzugte Shell löschen kann. Vermutlich möchte das OP neue Funktionen nutzen, die möglicherweise nicht funktionieren, wenn das Betriebssystem eine "neuere als die alte", aber eine "ältere als die benutzerdefinierte" Version von bash installiert. Es ist besser, den Standardpfad oder die Benutzer-Shell-Variable zu ändern.
bmike

Nun, Sie könnten einfach einen neuen Simlink erstellen, da dieser die Version von bash in Ihrem Verzeichnis usr / local nicht überschreiben würde. aber du hast recht, Daniels Weg ist wahrscheinlich besser
Lemonginger

Ooh - bearbeite deine Antwort bitte, um sie an die erste Stelle zu setzen (und behalte die ursprüngliche Idee, wenn du es als zweite Alternative
vorziehst

1
hmm, nun das / ist / was ich gesagt habe, aber ich habe es bearbeitet, um zu klären, was jeder Schritt ein bisschen besser macht. Immer noch denke, die bestbewertete Antwort ist wahrscheinlich besser :)
Lemonginger

Dies scheint ein ziemlich gefährlicher Weg zu sein, um die System-Shell zu ändern.
Samuel Mikel Bowles

0

Ich denke, es ist sicher, wenn Sie gerade starten

brew install bash

und fügen Sie es dann als Ihre Standardshell hinzu

chsh -s /usr/local/bin/bash

da Sie nur Ihren aktuellen Benutzer ändern. Ich habe jedoch festgestellt, dass mein Standardprofil ~ / .profile ist

if [ "/bin/bash" == $BASH ]; then
    source ~/.bashrc
fi

es muss also aktualisiert werden. Ich habe es in geändert

if [ "bash" == $(basename $BASH) ]; then
        source ~/.bashrc
fi

Weitere Antworten finden Sie unter Warum chshallein nicht ausreicht. Außerdem sieht Ihr aktualisiertes .profile-Snippet identisch mit dem Original aus
nohillside

@patrix: Dank dieses Hinweises habe ich das zweite Snippet aktualisiert. Es wäre schön, wenn brew install bashkeine weiteren Maßnahmen erforderlich wären. Mit dem aktualisierten Profil, das ich geteilt habe, geht es nicht. Ich hoffe das kann anderen helfen.
Gianluca Casati
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.