Como obter recursos do Bash 4.3 no Mac OS X?

0

Em El Capitan, 10.11.5 a versão do Bash é:

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.

Como posso usar / instalar o Bash 4.3 para utilizar recursos como o listado abaixo?

How to get a colored tab completion?

    
por sean2078 02.10.2016 / 00:30

2 respostas

3

Nota: Este não é realmente um processo difícil. Há apenas um monte de palavras. Demora cerca de 2 minutos ou menos, dependendo do seu sistema. Você quase pode copiar / colar esses comandos em sequência. Apenas mude qualquer coisa que esteja em todos os CAPS, geralmente.

Eu fiz isso no outro dia para macOS 10.12.x. Eu fui com v4.3.30 desde parece que v4.4 ainda está sendo testado, ou só terminou recentemente.

Faça o download (v4.3.30 neste caso) da fonte: link

Uma vez que você tenha baixado o bash, você pode executar esses comandos em ordem seqüencial, se você estiver certo em instalar em ~ / Bin (o que é minha sugestão; você pode sempre movê-lo mais tarde). Caso contrário, mostrarei onde você pode mudar isso. Tudo prefixado com um "#" é um comentário, então não o insira na linha de comando!

    # Unpack the archive.
    tar zxvf ~/Downloads/bash-4.3.tar.gz 
    # Change into the directory (of the unpacked archive).
    cd ~/Downloads/bash-4.3/
    # Create a directory to store some of your user programs.
    mkdir ~/Bin
    # Run configure which will gather info. about the installation 
    #+ environment. Optionally, you can include the --prefix option along
    #+ with an argument for the install location. If you'd like to install  
    #+ elsewhere, use --prefix and the location of your choosing.
    ./configure --prefix ~/Bin
    # Compile the source code.
    make
    # Install the compiled program. 
    # Note: You can do without sudo since you're installing locally.
    sudo make install

É isso. O bash agora está instalado . No entanto ... Existem algumas coisas que você deve saber:

Agora você tem duas versões diferentes do bash instaladas em seu sistema. Isto está perfeitamente bem. É até desejável para testes e compatibilidade com versões anteriores. É isso que estou fazendo e pretendo continuar. É como ter um shell de nome diferente em seu sistema, como zsh, sh, csh, etc.

A coisa a ter em conta é que quando você inicia o aplicativo Terminal e abre um novo shell, seu shell padrão ainda será o bash antigo, a menos que você o altere (mais sobre isso abaixo). Para iniciar o novo bash, você não pode simplesmente digitar o comando bash porque, então, o bash examinará sua variável PATH, descerá a lista e tentará encontre o bash, e é bem provável que ele venha com / bin / bash antes de encontrar seu novo bash, especialmente porque o novo bash pode ser (se você seguiu o meu conselho) em uma pasta chamada ~ / Bin que nem é um parte do seu PATH, ainda.

Então, neste ponto, se você deseja executar o bash-4.3.30 a partir da linha de comando, insira o caminho completo, substituindo USERNAME pelo nome do seu diretório pessoal: /Users/USERNAME/Bin/bash/bin/bash E você pode fazer um bash --version e dizer: "Ei, wtf! Por que ainda estou executando a festa?" E isso é porque você invocou a velha festa! Mais uma vez, entrar no comando bash provavelmente será resolvido para / bin / bash. Então, como podemos consertar isso? Ou, pelo menos, como podemos ver que estamos de fato executando o bash-4.3.30?

Se você quiser saber qual shell está sendo executado na linha de comando, faça: echo $0

$ 0 é um parâmetro especial para o bash, que armazena o nome do processo de execução, que neste caso, é o bash-4.3.30 (aquele que está fazendo o seu lance em seu nome, geralmente executando outros programas para você) . Agora, para ver a versão, digite o caminho completo para o programa apropriado que você deseja interpretar esse argumento, que é o novo bash-4.3.30, e é o mesmo que o valor de $ 0 que você acabou de receber de volta do echo. Então, faça: /Users/USERNAME/Bin/bash/bin/bash --version para ver a diferença. Pode parecer estranho, mas você está rodando bash-4.3.30 agora, mas você está rodando como um processo filho dentro de / bin / bash (a antiga festa). Agora digite exit e você sairá do bash4.3.30 e retornará ao bash antigo. exit novamente e você provavelmente fechará a janela do terminal e sairá da sessão do shell.

Agora, você tem algumas opções diferentes para usar o bash-4.3.30 sem ter que digitar o caminho completo toda vez que quiser lançá-lo.

Se você deseja executar o bash-4.3.30 por padrão, você pode alterar seu shell de login padrão no Terminal.app: Preferences… > Geral > Shells Open Com > ... Altere isso para Default Login Shell e insira o novo caminho completo do bash-4.3.30, mudando USERNAME para o nome do seu diretório home: /Users/USERNAME/Bin/bash/bin/bash

Se você ainda preferir executar o antigo bash no login, mas apenas torne um pouco mais fácil lançar o novo bash por não ter que lembrar o caminho, você pode criar um alias e anexá-lo ao seu ~ / .bashrc: echo 'alias bash4="/Users/USERNAME/Bin/bash/bin/bash"' >> ~/.bashrc Desta forma, você pode invocar o bash-4.3.30 apenas digitando o bash4 a partir da linha de comando.

Como alternativa, você pode adicionar o local do novo bash à sua variável PATH. Se você prefixar, em vez de acrescentar, você deve obter o bash-4.3.30 quando invocar bash da linha de comando:

    # Prefix ~/Bin/bash/bin/ to your PATH variable:
    PATH="~/Bin/bash/bin:${PATH}"
    # Save it by changing it in your ~/.bashrc
    echo 'export PATH="$PATH"' >> ~/.bashrc

Lembre-se de fazer echo $0 se não tiver certeza de qual bash você está executando. Eu não recomendaria renomear o novo ou antigo bash. Isso poderia levar a conseqüências indesejáveis. Embora, eu fiz isso no meu sistema como um teste (requer sudo). É assim que você aprende! E, agora, você sempre tem o antigo golpe de volta, e você sabe como construir um novo bash da fonte novamente, se necessário.

    
por 02.10.2016 / 05:50
1

Você poderia usar um gerenciador de pacotes (Homebrew, MacPorts, Fink, Nix, Rudix, etc.) para instalar um binário Bash, ou você poderia compilar a partir da fonte se você não usa um gerenciador de pacotes e prefere não instalar um .

Homebrew, MacPorts e Nix têm pacotes Bash > = Bash v4.3. Não tenho certeza sobre outros gerenciadores de pacotes. Se você não quer instalar através de um gerenciador de pacotes, você pode baixar a fonte Bash 4.3 e depois compilá-la. Se você não tiver certeza de como fazer isso, sinta-se à vontade para me pedir ajuda. Terei o prazer de passar pelo processo com você. ( Editar : a resposta do GH05T detalha como compilar a partir da fonte)

    
por 02.10.2016 / 03:49