web-dev-qa-db-fra.com

Comment mettre à jour bash sur Mac OS X Yosemite

J'essaie 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

Ensuite, dans les propriétés du terminal, j'ai modifié le chemin d'accès standard du shell de /bin/bash à /usr/local/bin/bash (si j'ai bien compris, c'est ici que l'homebrew installe le bash mis à jour).

Ensuite, j'ai vérifié le résultat à nouveau (et j'ai l'impression que tout va bien):

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

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

#!/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 Bash redevient ancienne lorsque j'essaie d'exécuter un script dans le même shell ??? Cela me fait peur! S'il vous plaît, quelqu'un m'explique quel est mon problème)))

25
Drew

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

#!/bin/bash

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

#!/usr/local/bin/bash

utiliser la nouvelle bash de /usr/local/bin.

17
BenjiWiebe

Installer une nouvelle 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

Utiliser env cherchera Bash dans votre $PATH et utilisera le premier rencontré. Vous pouvez voir quelle bash il utilisera en tapant which bash. S'il voit d'abord /bin/bash, vous devrez définir votre $PATH dans ~/.bashrc et /.bash_profile.

14
Ben

Comme l'a souligné pjv, vous devriez 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

cela échouera sur la plupart des systèmes linux.

5
Agoston Horvath