Як оновити bash на Mac OS X Yosemite


25

Просто намагаюся трохи навчитися писати сценарії. Моя стара версія bash:

Bash version 3.2.53(1)-release...

Я оновив свій баш на mac os x yosemite домашньою мовою:

brew update
brew install bash

Потім у властивостях терміналу я змінив стандартний шлях /bin/bashдо оболонки з на /usr/local/bin/bash(Як я розумію, саме тут домівка встановлює оновлений bash).

Потім я ще раз перевірив результат (і, здається, це все добре):

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

Але коли я намагався написати простий скрипт:

#!/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 повертається до старої, коли я намагаюся виконати скрипт в одній оболонці ??? Це просто вироджує мене! Будь-ласка, поясніть мені, у чому моя проблема)))

Відповіді:


17

Ваша проблема в першому рядку. У вас це є:

#!/bin/bash

в якому прямо вказано, що сценарій оболонки повинен працювати зі старим /bin/bash. Те, що вам справді хочеться, це:

#!/usr/local/bin/bash

користуватися новим bashвід /usr/local/bin.


дивна річ, але насправді це не спрацювало. Все-таки результат (((але я впевнений, що це частина проблеми
Дрю

Чи потрібно вказати цей шлях десь ще? У якомусь файлі оболонки чи щось?
Дрю

1
Можливо, середовище задається оболонкою, що викликає, тобто старим Bash? Як саме ви називаєте свій сценарій, @Andrew?
slhck

1
@ Андрій, я підозрюю , що ваш shв /bin. brewможе бути , не зробити символічну посилання для bashназивається sh. З вашим $PATHнабором правильно, спробуйте запустити його так: bash script.sh.
BenjiWiebe

8
Для подальшої довідки вам, мабуть, слід скористатися#!/usr/bin/env bash
pjvandehaar

15

Встановити новий bash:

brew install bash

Зробіть цю оболонку за замовчуванням:

chsh -s /usr/local/bin/bash

Встановіть середовище в сценарії:

#!/usr/bin/env bash

Використання envшукає Bash у вашому $PATHта використовувати перший, з яким він стикається. Ви можете побачити, який bashвін буде використовувати, ввівши which bash. Якщо він бачить /bin/bashперший, вам потрібно буде встановити $PATHв систему ~/.bashrcі /.bash_profile.


2
Якщо ви бачите, що "нестандартна оболонка" надрукована під час використання chsh, вам потрібно буде оновити / etc / shell .
Скотт Віллеке

6

Як вказував pjv, ви дійсно повинні користуватися

#!/usr/bin/env bash

у ваших сценаріях скрізь, щоб вони були портативними. Наприклад, якщо ви спробуєте запустити свій сценарій

#!/usr/local/bin/bash

він вийде з ладу в більшості систем Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.