Apple no actualizará Bash porque la última versión tiene licencia GPLv3, que Apple no puede usar. Sin embargo, han actualizado la mayoría de sus otros caparazones. ZSH, por ejemplo, está mayormente 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; ejemplos de Productos de usuario incluyen reproductores de música portátiles, grabadoras de video digital y sistemas de seguridad para el hogar.
Esto requeriría que, de lo contrario, el software de código cerrado tenga sus partes GPL modificadas por el público, lo que obviamente sería un problema para Apple.
bash
. La cláusula de "Tivoización" podría explicar por qué bash
no se puede actualizar, digamos, en un Apple TV, pero no en una Mac de escritorio. Además, las "porciones bajo GPL" ya tendrían que ser modificables por el público; v3 no cambiaría eso. Creo que la cláusula de patentes de GPL v3 sería suficiente para disuadir a Apple de tocar el código GPL v3.Como dijo @William en su respuesta, Apple no proporciona bash 4 debido a las restricciones de GPL. Sin embargo, puede instalar bash 4+ y también puede convertirlo en su shell predeterminado (incluso para Terminal e iTerm2 ) haciendo lo siguiente.
Primero instale la versión más nueva de bash. Hay varias formas de hacerlo, yo prefiero Homebrew.
brew install bash
.Bash 4 ahora está disponible en su RUTA (suponiendo que Homebrew bin esté en su ruta). Sin embargo, todavía no es su shell predeterminado. Puede encontrar dónde se encuentra ejecutando which bash
. En mi caso está en /usr/local/bin/bash
.
Dado que está en su RUTA, puede iniciar una sesión de Bash 4 con solo bash
o puede usarse en scripts usando un Shebang .
Por ejemplo, esto usará una instancia de bash específica.
#!/usr/local/bin/bash
...your script...
Esto usará el primer bash en el PATH.
#!/usr/bin/env bash
...your script...
También puede configurar la ruta bash para perfiles específicos en Terminal/iTerm2 siguiendo los pasos descritos en la respuesta de @ user136952.
Como se mencionó anteriormente, después de instalar Bash 4 todavía no es el shell predeterminado. Para que bash sea el valor predeterminado, debe realizar dos pasos más.
Primero, agregue la ruta de Bash 4 a su /etc/shells
archivo para que sea un shell de inicio de sesión permitido. Como se describe en /etc/shells , este archivo tiene la lista de shells de inicio de sesión válidos. Después de agregar la nueva ruta bash, mi /etc/shells
aspecto es el 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
A continuación, usamos chsh para convertirlo en su shell predeterminado. Entonces, cualquier sesión para ese usuario usará ese shell. Puede leer más sobre esto en Change the Shell in Mac OS X Terminal , pero el comando real es muy sencillo.
chsh -s /usr/local/bin/bash
Ahora el nuevo bash es nuestro shell de inicio de sesión predeterminado. Si abre Terminal o iTerm2 y ejecuta bash --version
, debería ver la nueva versión. Tenga en cuenta la "Licencia GPLv3+", razón por la cual 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>
sudo chpass -s /usr/local/bin/bash
cambia mi shell solo para root/sudo . Para cambiar mi inicio de sesión normal, debo ejecutar el comando sin sudo
. Esto podría ser algo de Active Directory; No estoy seguro.#!/usr/local/bin/bash
shebang, considere usar #!/usr/bin/env bash
( explicación ). Esto ejecutará la secuencia de comandos con cualquier versión de bash que sea accesible para el entorno que está iniciando la secuencia de comandos, es decir, lo que which bash
regrese. Es una solución más portátil que usar rutas específicas. No podemos esperar que otros usuarios instalen bash a través de homebrew.env
método porque facilita la reutilización de scripts entre macOS y Linux, por ejemplo, entre el host y las máquinas virtuales.chsh
fue el paso crítico que faltaba para mí. Gracias.brew install bash
de , el comando which bash
simplemente apuntaría a la versión bash 3.4 instalada de forma predeterminada en macOS, no a la versión que acaba de instalar con homebrew./usr/
. Hacer sudo
y editar /etc/shells
parece fuera de lugar, sería como editar /etc/paths
directamente para todos sus ejecutables en lugar de hacer eco $PATH
en su archivo .bashrc
.¿Es posible actualizar bash a la versión 4.0 en OSX Yosemite? Sí.
Descargue / instale homebrew http://brew.sh/ ejecutando este comando en la terminal.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Salga y vuelva a abrir su terminal. luego escribe
brew install bash
Cambie el shell predeterminado a través de la interfaz gráfica de usuario del terminal con la ruta literal de su nuevo bash (EDITAR: todavía tengo que encontrar una forma de CLI que funcione)
¿Es posible actualizar bash a la versión 4.0 de bash proporcionada por Apple en OSX Yosemite?
EDITAR: No. No en la forma en que pregunta el operador. Por ejemplo, actualice la instalación actual reemplazándose a sí misma. Se ha notado en otras respuestas que Apple no ha actualizado bash debido a problemas de licencia. Sin embargo, descargar una versión separada y actualizada de bash y usarla como shell predeterminado es la solución canónica para la mayoría de los intérpretes. Tome pitón por ejemplo. No actualiza 2.7 a 3.5, descarga una versión separada y cambia la predeterminada.
sudo chpass -s /usr/local/bin/bash
. Nota: es mejor señalar el enlace simbólico de /usr/local/bin/
esa manera Brew puede manejar las actualizaciones sin tener que cambiar su entorno cada vez.sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
luego chsh -s /usr/local/bin/bash
establecerá el shell predeterminado para la terminalbash
solo . Por lo tanto, se conservarán todas las dependencias del sistema .
/usr/local/bin/bash
/bin/bash
bash 3
Puedes instalar otra versión de Bash sin homebrew
Y sigue los pasos aquí: https://gist.github.com/samnang/1759336
Descargue e instale la versión de bash que desee Reemplace XX (en bash-XX) 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
Agregue 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
Busque 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. Coloque en su ~/.bash_profile
alias bash="/usr/local/bin/bash"
/bin/bash
? ¿Es porque es necesario para la compatibilidad con otro software "antiguo" que Apple distribuye en MacOS?/usr/local
. Si prefiere tenerlos organizados en un bash-X.X
directorio, agregue /bash-X.X
el parámetro de prefijo en el ./configure
comando./bin
directorio a menos que deshabilite SIP
.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 suelen utilizar env bash
, que vuelve a la versión bash de OS X. Por lo tanto, es posible que lo que desee no sea la actualización completa de bash, sino una instalación en paralelo que siempre devuelva la versión más nueva de bash (es decir, incluso cuando env
se invoque).
Entonces, para manejar esto:
1) instalar bash a través de Homebrew, como han publicado los otros comentaristas
2) configure su shell de inicio de sesión en esta nueva versión (a través de la GUI o el comando chsh como otros han publicado)
3) establezca /usr/local/bin
(o la ruta a la nueva versión de bash) antes de /bin
su variable $PATH, agregando esto a su ~/.bash_profile
:export PATH=/usr/local/bin:$PATH
.bash_profile
todos modos, por lo que solo afectaría algo que ejecute directamente en una terminal de todos modos.2019: Tan sencillo como en este post
$ brew install bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ chsh -s /usr/local/bin/bash
luego tabula un nuevo terminal, ¡disfrútalo!
Para Mac M1 -
Puedes actualizar bash haciendo
brew install bash
asumiendo que ya tienes Home-brew. Esto instalará la última versión de bash. Puede verificar su instalación ejecutando:
brew info bash
Para actualizar el shell, simplemente reinicie el terminal y verifique la versión de bash usando -
bash --version
Espero que esto ayude.
lupincho
usuario3439894
Prime624
jason s