È sicuro aggiornare Bash tramite Homebrew?


77

Sono nuovo di OS X. Sto eseguendo OS X Lion su un MacBook Pro. È sicuro aggiornare la shell bash usando Homebrew:

$ brew install bash

Se sicuro, come faccio a renderlo l'istanza predefinita della shell che corro attraverso Terminale?

Grazie!


2
Questa domanda è diventata improvvisamente estremamente rilevante, vedi Shellshock
ecnepsnai

Sì. 10 c h a r s
shrx

Risposte:


101

Binari in /{,usr/}{,s}bin/ di solito non dovrebbe essere sostituito con altri file. Altri programmi si aspettano che siano le versioni fornite con OS X e vengono sostituite dagli aggiornamenti del sistema operativo.

Dopo aver corso brew install bash, puoi cambiare la shell di default in modo sicuro per:

  • Aggiunta /usr/local/bin/bash a /etc/shells
  • In esecuzione chsh -s /usr/local/bin/bash.

Le impostazioni nel terminale o in iTerm 2 normalmente non devono essere modificate. Entrambi hanno l'abitudine di aprire nuove finestre con una shell di login della shell predefinita.

La shell di default può anche essere cambiata da Preferenze di Sistema o con dscl, ma tutte e tre le opzioni si modificano /var/db/dslocal/nodes/Default/users/$USER.plist.


Sembra che abbia funzionato, e se ho riscontrato problemi, dovrebbe essere facile tornare indietro! Grazie!
Rudy

non sapevo che la pagina delle opzioni avanzate era lì. Dolce!
lemonginger

2
Il bit sull'editing /etc/shells per includere il bash installato brew è richiesto. Altrimenti (almeno sulla mia macchina) il terminale si rifiuterà di avviarsi.
brendanjerwin

2
Il terzo comando (csh -s) sembra non essere più necessario su Mavericks 10.9.2.
Brent Faust

2
Ho appena dovuto brew install bash per questo funziona. (cioè non ha dovuto modificare /etc/shells )
Daniel

4

Potrei sbagliarmi qui, ma per quanto ne so brew installerebbe la propria istanza di bash, poiché la fermentazione funziona sotto /usr/local/bin mentre i valori di default del sistema funzionano sotto /bin (e /usr/bin ).

Informazioni su Terminal, puoi rendere le shell aperte con il tuo comando personalizzato. Vai a Preferenze & gt; Avvio e selezionare Conchiglie aperte con: Comando (percorso completo) . Basta digitare il percorso per il tuo nuovo bash e vuala!

Spero che sia d'aiuto!

BTW: Backup! Il miglior consiglio in queste situazioni!


hey, sai cosa, questa risposta funziona davvero come un incantesimo
castiel

0

Ben prima di fare qualsiasi cosa, eseguire il backup del file corrente (ovviamente, ma merita sempre di essere detto)

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

Quindi creare un link simbolico all'eseguibile bash scaricato da Homebrew. Penso che sarà in / usr / local / Cellar, così

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

Ora / bin / bash punta al file nella directory usr / local


3
Il rovescio della medaglia di plopping un nuovo bash in per la versione del sistema è qualsiasi aggiornamento del sistema operativo può cancellare la shell preferita. Presumibilmente, l'OP vuole utilizzare nuove funzionalità che potrebbero interrompersi se il sistema operativo installa una versione "più recente del vecchio sistema operativo" ma "più vecchia di quella personalizzata" di bash. Meglio cambiare il percorso predefinito o modificare la variabile della shell utente.
bmike

beh, potresti semplicemente creare un nuovo simlink poiché non sovrascriverebbe la versione di bash nella tua directory usr / local. ma tu hai ragione, la via di Daniel è meglio
lemonginger

Ooh - modifica la tua risposta per favore per prima cosa (e mantieni l'idea originale se preferisci come seconda alternativa - mi piace molto meglio e mi piacerebbe avere la possibilità di invertire il mio voto :-)
bmike

1
hmm, beh che / è / cosa ho detto, ma ho modificato per cercare di chiarire cosa fa ogni passo un po 'meglio. Continuo a pensare che la miglior risposta sia probabilmente meglio :)
lemonginger

Questo sembra un modo piuttosto pericoloso per cambiare la shell di sistema.
Samuel Mikel Bowles

0

Penso che sia sicuro se ti lanci

brew install bash

e quindi aggiungilo come shell predefinita

chsh -s /usr/local/bin/bash

dal momento che stai solo modificando il tuo attuale utente. Tuttavia, ho notato che il mio valore predefinito ~ / .Profile è

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

quindi deve essere aggiornato. L'ho cambiato in

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

Vedi altre risposte per il perché chsh da solo non è abbastanza Inoltre, lo snippet .profile aggiornato sembra identico a quello originale
nohillside

@patrix: grazie a ciò, ho aggiornato il secondo snippet. Sarebbe bello se brew install bash non richiederebbe ulteriori azioni. Con il profilo aggiornato che ho condiviso, non è così. Spero che questo possa aiutare gli altri.
Gianluca Casati
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.