Как обновить bash на Mac OS X Yosemite
просто пытаюсь немного научиться скриптингу bash.
Моя старая версия bash:
Bash version 3.2.53(1)-release...
я обновил свой bash на mac os x yosemite с homebrew:
brew update
brew install bash
затем в свойствах терминала я изменил стандартный путь снаряда от /bin/bash
to /usr/local/bin/bash
(как я понимаю, именно здесь доморощенный устанавливает обновленный 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 меняется на старую, когда я пытаюсь выполнить скрипт в той же оболочке??? Это просто выводит меня из себя! Пожалуйста кто-нибудь объясните мне в чем моя проблема)))
3 ответов
ваша проблема находится в первой строке. У вас есть это:
#!/bin/bash
, в котором явно указано, что сценарий оболочки должен запускаться со старым /bin/bash
.
Что ты действительно хочу, это:
#!/usr/local/bin/bash
использовать новый bash
С /usr/local/bin
.
установить новый bash:
brew install bash
сделать это оболочкой по умолчанию:
chsh -s /usr/local/bin/bash
установка окружения в скрипте:
#!/usr/bin/env bash
используя env
будет искать Баш в своем $PATH
и использовать первый встречный. Вы можете увидеть, какой bash
он будет использовать путем ввода which bash
. Если он видит /bin/bash
во-первых, вам нужно будет установить $PATH
in ~/.bashrc
и /.bash_profile
.
Как указал pjv, вы действительно должны использовать
#!/usr/bin/env bash
в ваших скриптах везде будет переносимо. Е. Г. если вы пытаетесь запустить свой скрипт
#!/usr/local/bin/bash
он потерпит неудачу на большинстве систем linux.
Другие вопросы bash bash-scripting macos shell shell-script