É seguro atualizar o Bash via Homebrew?


81

Eu sou novo no OS X. Estou executando o OS X Lion em um MacBook Pro. É seguro atualizar o shell bash usando o Homebrew:

$ brew install bash

Se seguro, como faço para torná-lo a instância padrão do shell que corro pelo Terminal?

Obrigado!


2
Esta questão, de repente, tornar-se extremamente relevante, ver Shellshock
ecnepsnai

Sim. 10 caracteres
shrx 07/03

Respostas:


105

Os binários em /{,usr/}{,s}bin/normalmente não devem ser substituídos por outros arquivos. Outros programas esperam que sejam as versões que acompanham o OS X e são substituídos por atualizações do SO.

Após a execução brew install bash, você pode alterar o shell padrão com segurança:

  • Adicionando /usr/local/bin/basha/etc/shells
  • Em execução chsh -s /usr/local/bin/bash.

As configurações no Terminal ou no iTerm 2 normalmente não precisam ser alteradas. Ambos padronizam a abertura de novas janelas com um shell de login do shell padrão.

O shell padrão também pode ser alterado nas Preferências do Sistema ou com dscl, mas todas as três opções são modificadas /var/db/dslocal/nodes/Default/users/$USER.plist.


Parece que funcionou e, se houver algum problema, será fácil reverter! Obrigado!
Rudy

não sabia que a página de opções avançadas estava lá. Doce!
Lemonginger 10/09/11

2
É necessário um pouco sobre a edição /etc/shellspara incluir o bash instalado pelo brew. Caso contrário (pelo menos na minha máquina), o terminal se recusará a iniciar.
Brendanjerwin

2
O terceiro comando (csh -s) parece não ser mais necessário no Mavericks 10.9.2.
Brent Faust

2
Eu só precisava fazer brew install bashisso funcionar. (ou seja, não precisa modificar /etc/shells)
Daniel

4

Eu posso estar errado aqui, mas até onde eu sei brewinstalar sua própria instância bash, uma vez que o brew funciona em baixo /usr/local/binenquanto os padrões do sistema funcionam em /bin(e /usr/bin).

Sobre o Terminal, você pode abrir os shells com seu próprio comando personalizado. Vá para Preferências> Inicialização e selecione Shells abertos com: Comando (caminho completo) . Basta digitar o caminho para o seu novo bashe vuala!

Espero que ajude!

BTW: Backup! O melhor conselho nessas situações!


hey, você sabe o quê, esta resposta, na verdade, funciona como um encanto
Castiel

0

Bem antes de fazer qualquer coisa, faça backup do seu arquivo atual (é claro, mas sempre merece ser dito)

sudo cp /bin/bash /bin/bash.3.2.bk

Em seguida, crie um link simbólico para o executável do bash que o Homebrew baixou. Eu acho que vai estar em / usr / local / Cellar, assim

sudo ln -s /usr/local/Cellar/bash/4.2.10/bin/bash /bin/bash

Agora / bin / bash aponta para o arquivo em seu diretório usr / local


3
A desvantagem de colocar um novo bash na versão do sistema é que qualquer atualização do sistema operacional pode apagar seu shell preferido. Presumivelmente, o OP deseja usar novos recursos que podem ser interrompidos se o sistema operacional instalar uma versão "mais recente que o antigo", mas "mais antiga que o personalizado" do bash. Melhor mudar o caminho padrão ou alterar a variável do shell do usuário.
bmike

bem, você pode simplesmente criar um novo simlink, pois ele não substituirá a versão do bash no diretório usr / local. mas você está correto, o caminho de Daniel é prov melhor
lemonginger

Ooh - editar a sua resposta por favor, para colocar essa primeira (e manter a idéia original se preferir como uma segunda alternativa - Eu gosto muito melhor e adoraria a chance de reverter o meu voto :-)
bmike

1
hmm, bem, isso é o que eu disse, mas editei para tentar esclarecer o que cada passo faz um pouco melhor. Ainda acho que a resposta mais bem avaliada é provavelmente melhor :)
#

Parece uma maneira bastante perigosa de alterar o shell do sistema.
Samuel Mikel Bowles

0

Eu acho que é seguro se você apenas lançar

brew install bash

e adicione-o como seu shell padrão

chsh -s /usr/local/bin/bash

pois você está apenas modificando seu usuário atual. No entanto, notei que o meu padrão ~ / .profile é

if [ "/bin/bash" == $BASH ]; then
    source ~/.bashrc
fi

portanto, ele precisa ser atualizado. Eu mudei para

if [ "bash" == $(basename $BASH) ]; then
        source ~/.bashrc
fi

Veja outras respostas para saber por que chshnão basta. Também o trecho .profile atualizados parece idêntico ao original um
nohillside

@patrix: obrigado por apontar, atualizei o segundo trecho. Seria bom se brew install bashnão fosse necessária nenhuma ação adicional. Com o perfil atualizado que compartilhei, isso não acontece. Espero que isso possa ajudar os outros.
Gianluca Casati
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.