Como atualizar o bash no Mac OS X Yosemite

25

Apenas tentando aprender um script bash um pouco. Minha versão antiga do bash:

Bash version 3.2.53(1)-release...

Eu atualizei meu bash no mac os x yosemite com homebrew:

brew update
brew install bash

Em seguida, nas propriedades do terminal, alterei o caminho do shell padrão de /bin/bash para /usr/local/bin/bash (Pelo que entendi, é onde o homebrew instala o bash atualizado).

Em seguida, verifiquei o resultado novamente (e parece que está tudo bem):

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

Mas quando eu estava tentando escrever um script simples:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

O RESULTADO É:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

EM VEZ 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

Por que a versão do Bash volta a ser antiga quando estou tentando executar o script no mesmo shell ??? Isso só me assusta! Por favor, alguém me explique qual é o meu problema)))

    
por Drew 27.12.2014 / 02:27

3 respostas

17

Seu problema está na sua primeira linha. Você tem isso:

#!/bin/bash

que declara explicitamente que o script de shell deve ser executado com o antigo /bin/bash . O que você realmente quer, é este:

#!/usr/local/bin/bash

para usar o novo bash de /usr/local/bin .

    
por 27.12.2014 / 06:15
13

Instale o novo bash:

brew install bash

Tornar este o shell padrão:

chsh -s /usr/local/bin/bash

Defina o ambiente em um script:

#!/usr/bin/env bash

Usar env procurará por Bash no seu $PATH e usará o primeiro que encontrar. Você pode ver qual bash usará digitando which bash . Se estiver vendo /bin/bash primeiro, você precisará definir seu $PATH em ~/.bashrc e /.bash_profile .

    
por 12.02.2016 / 02:21
5

Como pjv apontou, você realmente deveria usar

#!/usr/bin/env bash

nos seus scripts em todos os lugares para ser portável. Por exemplo. se você tentar executar seu script com

#!/usr/local/bin/bash

falhará na maioria dos sistemas linux.

    
por 16.11.2015 / 12:39