2009-04-26 4 views
36

nicht aktualisieren Ich aktualisierte erfolglos meine Bash zu 3.2.48 von MacPorts.Konnte meine Bash in Mac von MacPorts

Es scheint, dass ich es nicht aktiv, da ich

echo $BASH_VERSION 
3.2.17(1)-release 

bekommen Wie können Sie die neueste Bash aktiv so machen, dass ich es für meine Login-Shell zu bekommen?

+0

Wow, Ich wusste nicht einmal, dass ich die aktualisierte Shell nicht verwende. Vielen Dank! – Schwern

Antwort

72

Führen Sie den folgenden Code, zum Beispiel Shell von MacPorts installiert auf die neueste Bash zu ändern

chsh -s /opt/local/bin/bash 

Wenn das die Meldung gibt,

" non-standard shell "

Sie müssen hinzufügen

/opt/local/bin/bash 

bis

/etc/shells 

Beachten Sie, dass /etc/shells nur eine Textdatei ist, sodass Sie sie direkt bearbeiten können, wenn Sie sich als Root authentifizieren. Sie können es programmatisch von der

sudo -s 
Password: 
# echo /opt/local/bin/bash >> /etc/shells 

Befehl ändern Wenn Ihr erster chsh Befehl fehlgeschlagen ist, führen Sie es jetzt wieder, wenn Sie die obige Datei ändern verwaltet.

+0

Wenn beim Ausführen der Port-Anwendung Probleme auftreten, müssen Sie möglicherweise zusätzlich Ihre Bash-Profile aktualisieren. Weitere Informationen finden Sie unter http://superuser.com/a/366645/114131. –

+0

Beachten Sie, dass die Einträge in '/ etc/shells' möglicherweise neu angeordnet werden müssen, damit der neue' bash'-Standort den anderen vorausgeht, damit alles ordnungsgemäß funktioniert. – DilithiumMatrix

+0

@zhermes: Nicht wahr. Die Reihenfolge in/etc/shells hat keine Auswirkungen auf irgendetwas. – Noldorin

2

Ich vermute, es ist installiert, aber nicht als Ihre Login-Shell verwendet.

Sie können die Shell mithilfe von dscl in der Befehlszeile ändern.

Am dscl Eingabeaufforderung geben Sie die folgenden:

list Local/Default/Users 
read Local/Default/Users/<your username here> 
change Local/Default/Users/<your username here> UserShell /bin/bash /opt/local/bin/bash 

Ich habe ein weiteres Beispiel für dscl Verwendung auf meinem blog, wenn es hilft.

+1

Zuerst müssen Sie die neue Shell zu/etc/shells hinzufügen: # sudo echo/opt/local/bin/bash >>/etc/shells – Fa11enAngel

+2

ändern Local/Default/Benutzer/simpatico UserShell/bin/bash/opt/local/bin/bash

Attributsstatus: eDSAttributeNotFound DS-Fehler: -14134 (eDSAttributeNotFound) – simpatico

2

Sie können Ihre Login-Shell, aus den vorhandenen Mac OS X Login-Shell (standardmäßig seine /bin/bash ausgeliefert mit Mac OS X) wechseln, zu MacPorts /opt/local/bin/bash nur durch das folgende Shell-Skript:

#!/opt/local/bin/bash 
if [ `grep /opt/local/bin/bash /etc/shells` ]; 
then 
    echo /opt/local/bin/bash | chsh -s /opt/local/bin/bash;  
else 
    echo /opt/local/bin/bash | sudo tee -a /etc/shells; 
    chsh -s /opt/local/bin/bash; 
fi 
+2

Testen Sie nicht die Ausgabe von grep, testen Sie ihren Beendigungsstatus. 'if grep -Fxq/opt/lokal/bin/bash/etc/shells; dann " – geirha