AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 787581
Accepted
Gary U.U. Unixuser
Gary U.U. Unixuser
Asked: 2024-12-03 20:52:14 +0800 CST2024-12-03 20:52:14 +0800 CST 2024-12-03 20:52:14 +0800 CST

Como posso usar o Bash do Mac Ports em vez do Bash da Apple?

  • 772

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/shellsarquivo também não surtiu efeito.

Finalmente, a sugestão de Marc Wilson sobre o $PATH (veja abaixo) me levou à solução. Meu /etc/pathsinicialmente parecia assim:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

Quando coloquei o diretório Mac Ports /opt/local/binantes 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!

bash
  • 2 2 respostas
  • 67 Views

2 respostas

  • Voted
  1. Best Answer
    Marc Wilson
    2024-12-05T01:08:34+08:002024-12-05T01:08:34+08:00

    Seu primeiro exemplo mostra que seu $PATHnão está correto. Você está executando bash5, provavelmente iniciando-o explicitamente por meio da configuração "Shells abrem com" na aba Geral de Terminal.app. Mas você não atualizou $PATH, então o bashque o shell encontra, seja executando-o explicitamente (o bash --version), ou usando which, é o de /bin.

    Bash5e bash3leia os mesmos arquivos de configuração. Você precisa ter certeza de que colocou a $PATHatualização no arquivo apropriado para ter certeza de $PATHque 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 $PATHatualização deve estar em $HOME/.bashrc.

    Como bash5e bash3nã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 bashpágina de manual ( bash3ou bash5, as informações importantes são as mesmas) para obter informações sobre quando bashlê quais arquivos.

    Seu segundo exemplo mostra que MacPorts bashnão foi adicionado a /etc/shells. A mensagem de erro deixa claro que seu shell de login não foi alterado.

    O MacPorts bashnão se adiciona a si mesmo /etc/shells. O usuário precisa fazer isso.

    • 2
  2. Tim Kennedy
    2024-12-03T23:26:48+08:002024-12-03T23:26:48+08:00

    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.

    1. 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 Shellque 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.

    2. 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 o Default 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 bashvocê, 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 usar pwshenquanto 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 o pwshshell, e um perfil ZSH que inicia o zshshell em uma janela Solarized Dark.

    Na verdade, não há desvantagens na opção 2, além do pequeno inconveniente de esperar bashabrir um aplicativo que você bashainda não configurou para usar.

    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve