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)))

A dessiné
la source

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.

BenjiWiebe
la source
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.

Ben
la source
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.

Agoston Horvath
la source