Aggiorna bash alla versione 4.0 su OSX

54

È possibile aggiornare effettivamente bash alla versione 4.0 in OSX Yosemite?

echo $BASH_VERSION
3.2.57(1)-release

Questo articolo e questo thread fare riferimento alla stessa domanda, ma installano una nuova shell side-by-side con quello vecchio. C'è un modo per aggiornare direttamente la vecchia shell bash?

    
posta Roger 28.06.2015 - 11:50
fonte

5 risposte

29

Apple non aggiornerà Bash, perché l'ultima versione è sotto licenza GPLv3, che Apple non può utilizzare. Hanno però aggiornato la maggior parte delle altre shell. ZSH ad esempio è per lo più aggiornato.

References:

Dopo un po 'di ricerche, questo sembra il problema principale:

When people distribute User Products that include software under GPLv3, section 6 requires that they provide you with information necessary to modify that software. User Products is a term specially defined in the license; examples of User Products include portable music players, digital video recorders, and home security systems.

Ciò richiederebbe un software altrimenti closed-source, le sue parti GPL dovrebbero essere rese modificabili dal pubblico, il che ovviamente sarebbe un problema per Apple.

    
risposta data 23.07.2015 - 20:30
fonte
44

È possibile aggiornare effettivamente bash alla versione 4.0 in OS X Yosemite? Sì.

  1. Scarica / Installa homebrew link eseguendo questo comando nel terminale.

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. Esci e riapri il tuo terminale. quindi digita

    brew install bash
    
  3. Cambia la shell predefinita tramite il terminale gui con il percorso letterale della tua nuova bash (EDIT: devo ancora trovare un modo CLI che funzioni)

È possibile aggiornare effettivamente bash a la versione 4.0 di Apple fornita da bash in OS X Yosemite?

EDIT: No. Non nel modo in cui l'op sta chiedendo. Ad esempio, aggiorna l'installazione corrente sostituendola. È stato notato in altre risposte che Apple non ha aggiornato bash a causa di problemi di licenza. Tuttavia, il download di una versione aggiornata e separata di bash e il suo utilizzo come shell predefinita è la soluzione canonica, per la maggior parte degli interpreti. Prendi python per esempio. Non esegui l'upgrade da 2,7 a 3,5 per scaricare una versione separata e modificare l'impostazione predefinita.

    
risposta data 28.06.2015 - 12:01
fonte
27

Come ha detto @William nella sua risposta, Apple non fornisce bash 4 a causa delle restrizioni GPL. Puoi installare bash 4+ e puoi anche renderlo la tua shell predefinita (incluso per Terminal e iTerm2 ) effettuando le seguenti operazioni.

Installa Bash 4 tramite Homebrew

Prima installa la versione più recente di bash. Ci sono vari modi per farlo, preferisco l'Homebrew.

  • Installa Homebrew come descritto nel link .
  • Installa bash utilizzando brew install bash .

Bash 4 è ora disponibile sul tuo PATH (supponendo che il cestino di Homebrew sia sul tuo percorso). Tuttavia, non è ancora la tua shell predefinita. Puoi trovare dove si trova eseguendo which bash . Nel mio caso è a /usr/local/bin/bash .

Utilizzo di Bash 4

Dato che si trova sul tuo PATH, puoi iniziare una sessione di Bash 4 con solo bash o può essere usata negli script usando un Shebang .

Ad esempio, verrà utilizzata un'istanza di bash specifica.

#!/usr/local/bin/bash
...your script...

Questo userà la prima bash sul PERCORSO.

#!/usr/bin/env bash
...your script...

Puoi anche impostare il percorso bash per profili specifici in Terminal / iTerm2 usando i passaggi descritti nella risposta di @ user136952.

Rendi Bash 4 l'impostazione predefinita

Come menzionato sopra, dopo aver installato Bash 4 non è ancora la shell di default. Per rendere bash l'impostazione predefinita devi fare ancora due passaggi.

Per prima cosa, aggiungi il percorso di Bash 4 al tuo file /etc/shells in modo che sia una shell di accesso consentita. Come descritto in / etc / shells , questo file ha l'elenco delle shell di login valide. Dopo aver aggiunto il nuovo percorso bash, il mio /etc/shells è simile al seguente:

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash

Quindi usiamo chsh per renderlo la tua shell predefinita. Quindi qualsiasi sessione per quell'utente utilizzerà quella shell. Puoi leggere ulteriori informazioni a riguardo in Cambiare la shell nel terminale Mac OS X , ma il comando effettivo è molto semplice.

chsh -s /usr/local/bin/bash

Ora la nuova bash è la nostra shell di login predefinita. Se apri Terminal o iTerm2 ed esegui bash --version dovresti vedere la nuova versione. Nota la "Licenza GPLv3 +", motivo per cui Apple non lo associa con macOS.

$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    
risposta data 23.07.2017 - 19:07
fonte
0

Puoi installare un'altra versione di Bash senza homebrew

  • Vai a GNU Bash
  • Scarica la versione desiderata ( qui )
  • E segui i passaggi qui: link

    Scarica e installa la versione di bash che desideri Sostituisci X.X (in bash-X.X) con la versione che desideri ad esempio 4.4

    curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz
    tar xzf bash-X.X.tar.gz
    cd bash-X.X
    ./configure --prefix=/usr/local && make && sudo make install
    

    Add the new shell to the list of legit shells

    sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"
    

    Change the shell for the user

    chsh -s /usr/local/bin/bash
    

    Check for Bash 4 and /usr/local/bin/bash...

    echo $BASH && echo $BASH_VERSION
    

    Potresti voler aggiungere un alias se vuoi che il comando bash lo usi. Inserisci nel tuo ~ / .bash_profile

    alias bash="/usr/local/bin/bash"
    
risposta data 16.10.2018 - 14:48
fonte
-1

L'installazione side-by-side con un aggiornamento alla shell (tramite chsh o GUI) non riuscirà per gli script. Gli script usano spesso env bash , che ritorna alla versione bash di OS X. Quindi, quello che vuoi potrebbe non essere l'aggiornamento completo di bash, ma una installazione side-by-side che restituisce sempre la versione più recente di bash (cioè anche quando viene invocato env ).

Quindi, per gestire questo:

1) installa bash tramite Homebrew, come gli altri commentatori hanno pubblicato

2) imposta la tua shell di login su questa nuova versione (tramite la GUI o il comando chsh come altri hanno pubblicato)

3) imposta /usr/local/bin (o il percorso della nuova versione di bash) prima di /bin sulla tua variabile $ PATH, aggiungendo questo al tuo ~/.bash_profile : export PATH=/usr/local/bin:$PATH

    
risposta data 11.05.2018 - 22:20
fonte

Leggi altre domande sui tag