Cómo actualizar bash en Mac OS X Yosemite


25

Solo trato de aprender un poco las secuencias de comandos bash. Mi vieja versión bash:

Bash version 3.2.53(1)-release...

He actualizado mi bash en mac os x yosemite con homebrew:

brew update
brew install bash

Luego, en las propiedades del terminal, cambié la ruta estándar del shell de /bin/basha /usr/local/bin/bash(Según tengo entendido, aquí es donde el homebrew instala el bash actualizado).

Luego verifiqué el resultado nuevamente (y parece que todo está bien):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

Pero cuando estaba tratando de escribir un script bash simple:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

EL RESULTADO ES:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

EN LUGAR DE:

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

¿Por qué la versión de Bash vuelve a cambiar a la anterior cuando intento ejecutar el script en el mismo shell? ¡Esto me asusta! Por favor, alguien me explique cuál es mi problema)))

Respuestas:


17

Tu problema está en tu primera línea. Tu tienes esto:

#!/bin/bash

que establece explícitamente que el script de shell debe ejecutarse con el antiguo /bin/bash. Lo que realmente quieres es esto:

#!/usr/local/bin/bash

usar lo nuevo bashde /usr/local/bin.


cosa rara, pero en realidad no funcionó. Sigue siendo el mismo resultado (((pero estoy seguro de que esto es parte de un problema
— Drew

¿Necesito especificar esta ruta en otro lugar? ¿En algún archivo de shell o algo así?
— Dibujó el

1
¿Quizás el entorno lo establece el shell de llamada, es decir, el viejo Bash? ¿Cómo llamas exactamente tu guión, @Andrew?
— slhck

1
@ Andrew, sospecho que estás shdentro /bin. brewtal vez no hizo un enlace simbólico para bashllamado sh. Con su $PATHconjunto correctamente, intente iniciar de esta manera: bash script.sh.
— BenjiWiebe

8
Para referencia futura, probablemente debería usar#!/usr/bin/env bash
— pjvandehaar

15

Instalar nuevo bash:

brew install bash

Haga de este el shell predeterminado:

chsh -s /usr/local/bin/bash

Establecer el entorno en un script:

#!/usr/bin/env bash

El uso envbuscará Bash en tu $PATHy usará el primero que encuentre. Puede ver cuál bashusará escribiendo which bash. Si se está viendo /bin/bashen primer lugar, tendrá que configurar su $PATHen ~/.bashrcy /.bash_profile.


2
Si ve que se imprime "shell no estándar" al usarlo chsh, deberá actualizar / etc / shells .
— Scott Willeke

6

Como pjv señaló, realmente deberías usar

#!/usr/bin/env bash

en tus scripts en todas partes para ser portátil. Por ejemplo, si intentas ejecutar tu script con

#!/usr/local/bin/bash

fallará en la mayoría de los sistemas Linux.

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.