Po prostu próbuję nauczyć się trochę skryptów bash. Moja stara wersja bash:
Bash version 3.2.53(1)-release...
Zaktualizowałem moją wersję bash na Mac OS X Yosemite z Homebrew:
brew update
brew install bash
Następnie we właściwościach terminala zmieniłem standardową ścieżkę powłoki z /bin/bash
na /usr/local/bin/bash
(rozumiem, że tutaj homebrew instaluje zaktualizowaną wersję bash).
Następnie ponownie sprawdziłem wynik (i wydaje się, że wszystko jest w porządku):
$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...
Ale kiedy próbowałem napisać prosty skrypt bash:
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
do
echo "Welcome $i times"
done
WYNIK TO:
Bash version 3.2.53(1)-release...
Welcome {0..10..2} times
ZAMIAST:
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
Dlaczego wersja Bash zmienia się z powrotem na starą, kiedy próbuję wykonać skrypt w tej samej powłoce? To mnie przeraża! Proszę, wyjaśnij mi, jaki jest mój problem)))
sh
jest w środku/bin
.brew
może nie utworzył dowiązania symbolicznego dlabash
tzwsh
. Z$PATH
zestawu poprawnie, spróbuj uruchomić go w ten sposób:bash script.sh
.#!/usr/bin/env bash
Zainstaluj nowy bash:
Ustaw jako domyślną powłokę:
Ustaw środowisko w skrypcie:
Użycie
env
wyszuka Bash w twoim$PATH
i użyje pierwszego, którego napotka. Możesz zobaczyć, z czegobash
skorzysta, piszącwhich bash
. Jeśli to widząc/bin/bash
pierwsze, trzeba będzie ustawić$PATH
in~/.bashrc
a/.bash_profile
.źródło
chsh
zostanie wydrukowana „niestandardowa powłoka” , musisz zaktualizować plik / etc / shells .Jak wskazał pjv, naprawdę powinieneś użyć
w skryptach wszędzie, aby były przenośne. Np. Jeśli spróbujesz uruchomić skrypt
zawiedzie w większości systemów Linux.
źródło