Como atualizar o bash no Mac OS X Yosemite


25

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

Bash version 3.2.53(1)-release...

Atualizei meu bash no mac os x yosemite com homebrew:

brew update
brew install bash

Em seguida, nas propriedades do terminal, mudei o caminho padrão do shell de /bin/bashpara /usr/local/bin/bash(como eu entendo, é aqui que o homebrew instala o bash atualizado).

Então eu 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 bash 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

AO INVÉS 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 para a antiga quando estou tentando executar o script no mesmo shell ??? Isso só me assusta! Por favor, alguém me explique qual é o meu problema)))

Respostas:


17

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

#!/bin/bash

que afirma explicitamente que o script do shell deve ser executado com o antigo /bin/bash. O que você realmente deseja é este:

#!/usr/local/bin/bash

para usar o novo bashde /usr/local/bin.


coisa estranha, mas na verdade não funcionou. Ainda é o mesmo resultado (((Mas tenho certeza de que isso faz parte de um problema
Drew

Preciso especificar esse caminho em outro lugar? Em algum arquivo shell ou algo assim?
Drew

1
Talvez o ambiente seja definido pelo shell de chamada, ou seja, o antigo Bash? Como exatamente você está chamando seu script, @Andrew?
slhck

1
@ Andrew, eu suspeito que o seu shestá em /bin. brewtalvez não tenha criado um link simbólico para o bashchamado sh. Com seu $PATHconjunto corretamente, tente iniciá-lo como este: bash script.sh.
BenjiWiebe

8
Para referência futura, você provavelmente deve usar#!/usr/bin/env bash
pjvandehaar

15

Instale o novo bash:

brew install bash

Faça deste o shell padrão:

chsh -s /usr/local/bin/bash

Defina o ambiente em um script:

#!/usr/bin/env bash

O uso envprocurará o Bash no seu $PATHe usará o primeiro que ele encontrar. Você pode ver qual bashserá usado digitando which bash. Se estiver vendo /bin/bashprimeiro, será necessário definir seu $PATHin ~/.bashrce /.bash_profile.


2
Se você chshvir "shell não padrão" impresso durante o uso , precisará atualizar o / etc / shells .
Scott Willeke

6

Como pjv apontou, você realmente deve usar

#!/usr/bin/env bash

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

#!/usr/local/bin/bash

falhará na maioria dos sistemas linux.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.