Просто пытаюсь немного изучить скрипты bash. Моя старая версия Bash:
Bash version 3.2.53(1)-release...
Я обновил мой bash на Mac OS X Yosemite с помощью homebrew:
brew update
brew install bash
Затем в свойствах терминала я изменил стандартный путь оболочки с /bin/bash
на /usr/local/bin/bash
(насколько я понимаю, именно здесь homebrew устанавливает обновленный bash).
Затем я проверил результат еще раз (и кажется, что все хорошо):
$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...
Но когда я пытался написать простой скрипт bash:
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
do
echo "Welcome $i times"
done
РЕЗУЛЬТАТ ЭТО:
Bash version 3.2.53(1)-release...
Welcome {0..10..2} times
ВМЕСТО ТОГО:
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
Почему версия Bash меняется обратно на старую, когда я пытаюсь выполнить скрипт в той же оболочке ??? Это просто бесит меня! Пожалуйста, кто-нибудь объясните мне, в чем моя проблема)))
источник
sh
здесь/bin
.brew
может быть , не сделать символическую ссылку дляbash
называетсяsh
. С вашим$PATH
набором правильно, попробуйте запустить его так:bash script.sh
.#!/usr/bin/env bash
Установите новый bash:
Сделайте это оболочкой по умолчанию:
Установите среду в скрипте:
Использование
env
будет искать Bash в вашем$PATH
и использовать первый, с которым он сталкивается. Вы можете увидеть, чтоbash
он будет использовать, набравwhich bash
. Если он видит/bin/bash
первый, вам нужно будет установить$PATH
в систему~/.bashrc
и/.bash_profile
.источник
chsh
, вам нужно будет обновить / etc / shells .Как указал pjv, вы действительно должны использовать
в ваших сценариях везде быть переносимым. Например, если вы попытаетесь запустить свой скрипт с
это потерпит неудачу на большинстве систем Linux.
источник