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