Eu instalei o Mac Ports e sua versão bash no 10.15 Catalina, mas quando abro o terminal, ainda sou recebido com a versão antiga do bash da Apple e estou perdendo todos os ports do Mac que instalei. Eles estão lá, mas apenas na nova versão do bash.
(1) Nas Preferências do Sistema da Apple, na seção Avançado de Usuários e Grupos, inseri o caminho bash das Portas do Mac /opt/local/bin/bash
, mas não teve efeito algum.
(2) Alterar as preferências do Terminal para /opt/local/bin/bash
(veja a sugestão abaixo de Tim Kennedy) também não teve efeito.
Esta é a situação após a aplicação destas duas alterações:
$ echo $BASH_VERSION
5.2.32(1)-release
$ bash -version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
$ which bash
/bin/bash
Há também um post relacionado « again… bash version mac didn't change », mas ele cobre a versão Homebrew e não Mac Ports e também não resolve esse problema. Ele contém, no entanto, algumas outras informações úteis.
(3) A aplicação da solução do artigo acima mencionado também não teve efeito:
$ chsh -s /opt/local/bin/bash
Changing shell for admin.
Password for admin:
chsh: /opt/local/bin/bash: non-standard shell
$ which bash
/bin/bash
(4) A sugestão de edição do /etc/shells
arquivo também não surtiu efeito.
Finalmente, a sugestão de Marc Wilson sobre o $PATH (veja abaixo) me levou à solução. Meu /etc/paths
inicialmente parecia assim:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Quando coloquei o diretório Mac Ports /opt/local/bin
antes do local bash da Apple /bin
, usando sudo vi /etc/paths
, finalmente consegui. Agora, quando abro o Terminal, recebo:
$ echo $BASH_VERSION
5.2.32(1)-release
$ bash -version
GNU bash, version 5.2.32(1)-release (x86_64-apple-darwin19.6.0)
$ which bash
/opt/local/bin/bash
$ figlet it works
_ _ _
(_) |_ __ _____ _ __| | _____
| | __| \ \ /\ / / _ \| '__| |/ / __|
| | |_ \ V V / (_) | | | <\__ \
|_|\__| \_/\_/ \___/|_| |_|\_\___/
Obrigado a todos!
Seu primeiro exemplo mostra que seu
$PATH
não está correto. Você está executandobash5
, provavelmente iniciando-o explicitamente por meio da configuração "Shells abrem com" na aba Geral deTerminal.app
. Mas você não atualizou$PATH
, então obash
que o shell encontra, seja executando-o explicitamente (obash --version
), ou usandowhich
, é o de/bin
.Bash5
ebash3
leia os mesmos arquivos de configuração. Você precisa ter certeza de que colocou a$PATH
atualização no arquivo apropriado para ter certeza de$PATH
que está atualizado. Se o shell estiver sendo executado como um shell de login, ele deve estar em$HOME/.bash_profile
. Se o shell estiver sendo executado como um shell sem login, essa$PATH
atualização deve estar em$HOME/.bashrc
.Como
bash5
ebash3
não têm o mesmo$PATH
(sua declaração "Eles estão lá, mas apenas na nova versão do bash"), um está sendo executado como um shell de login e o outro não.Leia a seção INVOCATION da
bash
página de manual (bash3
oubash5
, as informações importantes são as mesmas) para obter informações sobre quandobash
lê quais arquivos.Seu segundo exemplo mostra que MacPorts
bash
não foi adicionado a/etc/shells
. A mensagem de erro deixa claro que seu shell de login não foi alterado.O MacPorts
bash
não se adiciona a si mesmo/etc/shells
. O usuário precisa fazer isso.A versão do bash fornecida pela Apple é realmente muito antiga, 3.2.57 (novembro de 2014), enquanto a versão atual em dezembro de 2024 é 5.2.37 (set. de 2024).
Há algumas maneiras de alterar seu shell padrão no Mac OS.
Você pode alterá-lo via Configurações -> Usuários e Grupos -> clique com o botão direito no usuário que deseja alterar e selecione o menu "Opções Avançadas". Lá você verá uma propriedade chamada
Login Shell
que terá uma lista de shells conhecidos e uma opção "Escolher" que permitirá que você navegue até o shell escolhido (Macports Bash) e o selecione como seu shell padrão.Se você quiser apenas alterar seu shell no aplicativo Terminal, abra o aplicativo Terminal e, na barra de menu superior, selecione Terminal -> Configurações e clique em Geral. No meio dessa janela, você verá um rótulo
Shells open with:
. Você pode escolher oDefault login shell
, que é o padrão, ou pode selecionar outro shell, como o Macports Bash.A vantagem da opção 1 é que ela muda seu shell padrão para cada aplicativo que abre um terminal. Terminal, iTerm2, VScode, etc., etc. A desvantagem é que ela muda seu shell padrão em todos os lugares, e pode ter consequências não intencionais dependendo da escolha do shell. Com
bash
você, definitivamente estaria seguro mudando o shell de login padrão.A vantagem da opção 2 é que você tem mais flexibilidade. Você pode deixar o aplicativo Terminal usando o shell padrão, que é
zsh
, então instalar o iTerm2 e fazê-lo usar o bash. E fazer o VScode usarpwsh
enquanto você está nisso. Você também pode definir seus aplicativos de terminal para ter perfis diferentes que cada um inicia shells diferentes. Por exemplo, eu tenho um perfil Powershell que usa um fundo azul escuro, com um primeiro plano cinza claro, que inicia opwsh
shell, e um perfil ZSH que inicia ozsh
shell em uma janela Solarized Dark.Na verdade, não há desvantagens na opção 2, além do pequeno inconveniente de esperar
bash
abrir um aplicativo que vocêbash
ainda não configurou para usar.