Comment mettre à jour bash sur Mac OS X Yosemite


25

J'essaye juste d'apprendre un peu le script bash. Mon ancienne version bash:

Bash version 3.2.53(1)-release...

J'ai mis à jour mon bash sur mac os x yosemite avec homebrew:

brew update
brew install bash

Puis , dans les propriétés du terminal que j'ai changé le chemin shell standard de /bin/bashla /usr/local/bin/bash(Si je comprends bien c'est là le homebrew installe le bash mis à jour).

Ensuite, j'ai vérifié à nouveau le résultat (et il semble que tout soit bon):

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

Mais quand j'essayais d'écrire un simple script bash:

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

LE RÉSULTAT EST:

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

AU LIEU 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

Pourquoi la version de Bash revient à l'ancienne lorsque j'essaie d'exécuter le script dans le même shell ??? Cela me fait juste paniquer! S'il vous plaît quelqu'un m'explique quel est mon problème)))

Réponses:


17

Votre problème est dans votre première ligne. Tu as ceci:

#!/bin/bash

qui indique explicitement que le script shell doit être exécuté avec l'ancien /bin/bash. Ce que vous voulez vraiment , c'est:

#!/usr/local/bin/bash

pour utiliser le nouveau bashde /usr/local/bin.


chose bizarre, mais ça n'a pas fonctionné. Toujours le même résultat (((Mais je suis sûr que cela fait partie d'un problème
Drew

Dois-je spécifier ce chemin ailleurs? Dans un fichier shell ou quelque chose?
Drew

1
Peut-être que l'environnement est défini par le shell appelant, c'est-à-dire l'ancien Bash? Comment appelez-vous exactement votre script, @Andrew?
slhck

1
@Andrew, je soupçonne que vous shy êtes /bin. brewpeut-être n'a pas fait de lien symbolique pour bashappelé sh. Avec votre $PATHjeu correctement, essayez de le démarrer comme ceci: bash script.sh.
BenjiWiebe

8
Pour référence future, vous devriez probablement utiliser#!/usr/bin/env bash
pjvandehaar

15

Installez un nouveau bash:

brew install bash

Faites-en le shell par défaut:

chsh -s /usr/local/bin/bash

Définissez l'environnement dans un script:

#!/usr/bin/env bash

L'utilisation envcherchera Bash dans votre $PATHet utilisera le premier qu'il rencontre. Vous pouvez voir lequel bashil utilisera en tapant which bash. S'il voit d' /bin/bashabord, vous devrez configurer votre $PATHentrée ~/.bashrcet /.bash_profile.


2
Si vous voyez "shell non standard" imprimé lors de l'utilisation chsh, vous devrez mettre à jour / etc / shells .
Scott Willeke

6

Comme l'a souligné pjv, vous devez vraiment utiliser

#!/usr/bin/env bash

dans vos scripts partout pour être portable. Par exemple, si vous essayez d'exécuter votre script avec

#!/usr/local/bin/bash

il échouera sur la plupart des systèmes Linux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.