Actualizar bash a la versión 4.0 en OSX

51

¿Es posible actualizar bash a la versión 4.0 en OSX Yosemite?

echo $BASH_VERSION
3.2.57(1)-release

Este artículo y este thread se refieren a la misma pregunta, pero instalan una nueva carcasa de lado a lado con el viejo. ¿Hay alguna manera de actualizar directamente el shell bash antiguo?

    
pregunta Roger 28.06.2015 - 11:50

5 respuestas

27

Apple no actualizará Bash, porque la versión más reciente tiene licencia GPLv3, que Apple no puede usar. Aunque han actualizado la mayoría de sus otras conchas. ZSH, por ejemplo, está casi actualizado.

Referencias:

Después de un poco de investigación, este parece ser el problema principal:

  

Cuando las personas distribuyen Productos de Usuario que incluyen software bajo GPLv3, la sección 6 requiere que le proporcionen la información necesaria para modificar ese software. Productos de usuario es un término especialmente definido en la licencia; Los ejemplos de productos de usuario incluyen reproductores de música portátiles, grabadores de video digital y sistemas de seguridad para el hogar.

Esto requeriría que, de lo contrario, el software de código cerrado, haga que sus partes de la GPL sean modificables por el público, lo que obviamente sería un problema para Apple.

    
respondido por el William T Froggard 23.07.2015 - 20:30
40

¿Es posible actualizar bash a la versión 4.0 en OSX Yosemite? Sí.

  1. Descargar / Instalar homebrew enlace ejecutando este comando en la terminal.

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. Salga y vuelva a abrir su terminal. luego escribe

    brew install bash
    
  3. Cambie el shell predeterminado a través de la interfaz gráfica de terminal con la ruta literal de su nuevo bash (EDIT: aún no he encontrado una forma de CLI que funcione)

¿Es posible actualizar bash a bash proporcionado por Apple versión 4.0 en OSX Yosemite?

EDITAR: No. No en la forma en que la operación está preguntando. Por ejemplo, actualice la instalación actual reemplazándola. Se ha observado en otras respuestas que Apple no ha actualizado el bash debido a problemas de licencia. Sin embargo, la descarga de una versión actualizada y separada de bash y su uso como shell predeterminado es la solución canónica, para la mayoría de los intérpretes. Tomemos Python por ejemplo. No actualiza 2.7 a 3.5, descarga una versión separada y cambia su valor predeterminado.

    
respondido por el user136952 28.06.2015 - 12:01
24

Como dijo @William en su respuesta, Apple no proporciona el bash 4 debido a las restricciones de la GPL. Sin embargo, puede instalar bash 4+ y también puede convertirlo en su shell predeterminado (incluso para Terminal y iTerm2 ) haciendo lo siguiente.

Primero instala la versión más reciente de bash. Hay varias formas de hacerlo, prefiero Homebrew.

  • Instale Homebrew como se describe en enlace .
  • Instala bash usando brew install bash .

Bash ya está disponible y el shell activo para la sesión actual. Puede encontrar dónde se encuentra ejecutando which bash . En mi caso es en /usr/local/bin/bash . Este nuevo bash ahora se puede usar en scripts usando un Shebang con la nueva ruta de bash al comienzo de los scripts. También puede usarlo para perfiles específicos en Terminal / iTerm2 siguiendo los pasos descritos en la respuesta de @ user136952.

#!/usr/local/bin/bash
...your script...

Supongo que esto es lo que quieres decir con "lado a lado" en tu pregunta. Para que bash sea el valor predeterminado, debe realizar dos pasos más.

Primero, agregue esa ruta bash a su archivo /etc/shells . Como se describe en / etc / shells , este archivo tiene la lista de shells de inicio de sesión válidos. Antes de que el nuevo bash pueda ser el predeterminado, tiene que ser válido. Después de agregar la nueva ruta de bash, mi /etc/shells se parece a lo siguiente:

# 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

Finalmente podemos usar chsh para convertirlo en el shell predeterminado. Puede leer más sobre esto en Cambiar el Shell en la Terminal Mac OS X , pero el comando real es muy sencillo.

sudo chsh -s /usr/local/bin/bash

Ahora el nuevo bash es nuestro shell predeterminado. Si abre Terminal o iTerm2 y ejecuta bash --version debería ver la nueva versión. Tenga en cuenta la "Licencia GPLv3 +" que es la razón por la que Apple no la incluye con macOS.

$ 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>
    
respondido por el studgeek 23.07.2017 - 19:07
0

Puedes instalar otra versión de Bash sin homebrew

  • Vaya a GNU Bash
  • Descargue la versión que desee ( aquí )
  • Y siga los pasos aquí: enlace

    Descargue e instale la versión de bash que desee Reemplace X.X (en bash-X.X) con la versión que desee, por ejemplo, 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
    
         

    Agregar el nuevo shell a la lista de shells legítimos

    sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"
    
         

    Cambiar el shell para el usuario

    chsh -s /usr/local/bin/bash
    
         

    Compruebe si hay Bash 4 y / usr / local / bin / bash ...

    echo $BASH && echo $BASH_VERSION
    

    Es posible que desee agregar un alias si desea que el comando bash lo use. Coloca en tu ~ / .bash_profile

    alias bash="/usr/local/bin/bash"
    
respondido por el Raposo 16.10.2018 - 14:48
-1

La instalación en paralelo con una actualización de su shell (a través de chsh o la GUI) fallará para los scripts. Los scripts a menudo usan env bash , que vuelve a la versión bash de OS X. Entonces, lo que desea puede no ser la actualización completa de bash, sino una instalación en paralelo que siempre devuelve la versión más nueva de bash (es decir, incluso cuando se invoca env ).

Entonces, para manejar esto:

1) instala bash a través de Homebrew, como los otros comentaristas han publicado

2) configura tu shell de inicio de sesión con esta nueva versión (a través de la GUI o el comando chsh, como han publicado otros)

3) establece /usr/local/bin (o la ruta a la nueva versión de bash) por delante de /bin en tu variable $ PATH, agregando esto a tu ~/.bash_profile : export PATH=/usr/local/bin:$PATH

    
respondido por el cwingrav 11.05.2018 - 22:20

Lea otras preguntas en las etiquetas