¿Es seguro actualizar Bash a través de Homebrew?


81

Soy nuevo en OS X. Estoy ejecutando OS X Lion en una MacBook Pro. ¿Es seguro actualizar el shell bash usando Homebrew:

$ brew install bash

Si es seguro, ¿cómo hago que sea la instancia predeterminada del shell que ejecuto a través de Terminal?

¡Gracias!


2
Esta pregunta de repente se ha vuelto extremadamente relevante, ver Shellshock
ecnepsnai

Si. 10 caracteres
shrx

Respuestas:


105

Los /{,usr/}{,s}bin/archivos binarios generalmente no deben reemplazarse con otros archivos. Otros programas esperan que sean las versiones que vienen con OS X, y son reemplazados por actualizaciones del sistema operativo.

Después de ejecutar brew install bash, puede cambiar el shell predeterminado de forma segura:

  • Agregando /usr/local/bin/basha/etc/shells
  • Correr chsh -s /usr/local/bin/bash.

La configuración en Terminal o iTerm 2 normalmente no tiene que cambiarse. Ambos predeterminados abren nuevas ventanas con un shell de inicio de sesión del shell predeterminado.

El shell predeterminado también se puede cambiar desde Preferencias del sistema o con dscl, pero las tres opciones simplemente se modifican /var/db/dslocal/nodes/Default/users/$USER.plist.


Parece que funcionó, y si tengo algún problema, ¡debería ser fácil retroceder! ¡Gracias!
Rudy

No sabía que la página de opciones avanzadas estaba allí. ¡Dulce!
lemonginger

2
Se /etc/shellsrequiere un poco sobre la edición para incluir el bash instalado en brew. De lo contrario (al menos en mi máquina), el terminal se negará a arrancar.
brendanjerwin

2
Parece que el tercer comando (csh -s) ya no es necesario en Mavericks 10.9.2.
Brent Faust

2
Solo tenía que hacerlo brew install bashpara que esto funcionara. (es decir, no tuve que modificar /etc/shells)
Daniel

4

Podría estar equivocado aquí, pero hasta donde sé brewinstalaría su propia instancia bash, ya que brew funciona bajo /usr/local/binmientras que el sistema predeterminado funciona bajo /bin(y /usr/bin).

Acerca de Terminal, puede abrir shells con su propio comando personalizado. Vaya a Preferencias> Inicio y seleccione Shells open with: Command (ruta completa) . Simplemente escriba el camino a su nuevo bashy vuala!

¡Espero eso ayude!

Por cierto: copia de seguridad! ¡El mejor consejo en estas situaciones!


oye, sabes qué, esta respuesta en realidad funciona como un encanto
castiel

0

Mucho antes de hacer nada, haga una copia de seguridad de su archivo actual (por supuesto, pero siempre merece ser dicho)

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

Luego, cree un enlace simbólico al ejecutable de bash que Homebrew descargó. Creo que estará en / usr / local / Cellar, así

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

Ahora / bin / bash apunta al archivo en su directorio usr / local


3
La desventaja de instalar un nuevo bash para la versión del sistema es que cualquier actualización del sistema operativo puede borrar su shell preferido. Presumiblemente, el OP quiere usar nuevas funciones que podrían romperse si el sistema operativo instala una versión de bash "más reciente que el antiguo" pero "anterior a la personalizada". Es mejor cambiar la ruta predeterminada o cambiar la variable de shell del usuario.
bmike

bueno, podría crear un nuevo enlace sim, ya que no sobrescribiría la versión de bash en su directorio usr / local. pero tienes razón, el camino de Daniel es
probablemente

Ooh: edite su respuesta, por favor, ponga eso primero (y mantenga la idea original si lo prefiere como segunda alternativa; me gusta mucho más y me encantaría tener la oportunidad de revertir mi voto :-)
bmike

1
hmm, bueno, eso es lo que dije, pero lo edité para tratar de aclarar qué hace cada paso un poco mejor. Todavía creo que la respuesta mejor calificada es probablemente mejor :)
lemonginger

Esto parece una forma bastante peligrosa de cambiar el shell del sistema.
Samuel Mikel Bowles

0

Creo que es seguro si solo lanzas

brew install bash

y luego agregarlo como su shell predeterminado

chsh -s /usr/local/bin/bash

ya que solo estás modificando a tu usuario actual. Sin embargo, noté que mi ~ / .profile predeterminado es

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

entonces necesita ser actualizado. Lo cambié a

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

Vea otras respuestas sobre por qué chshsolo no es suficiente. También su fragmento de perfil actualizado se ve idéntico al original
nohillside

@patrix: gracias por señalarlo, actualicé el segundo fragmento. Sería bueno si brew install bashno requiriera ninguna otra acción. Con el perfil actualizado que compartí, no lo hace. Espero que esto pueda ayudar a otros.
Gianluca Casati
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.