Mettre à jour bash vers la version 4.0 sur OSX

81

Est-il possible de mettre à jour bash vers la version 4.0 dans OSX Yosemite?

echo $BASH_VERSION
3.2.57(1)-release

Cet article et ce fil renvoient à la même question, mais ils installent un nouveau shell côte à côte avec l'ancien. Existe-t-il un moyen de mettre à jour directement l’ancien shell bash?

sluijs
la source
3
Il n'y a pas besoin de faire ça. En fait, c'est toujours une bonne idée de conserver l'original. Deux versions ou plus de bash peuvent être installées simultanément et vous pouvez choisir celle par défaut
lupincho
Essentiellement, la mise à jour de logiciels d’Apple serait responsable de la modification de la version de BASH sur le système, comme c’était le cas avec la mise à jour BASH pour Shellshock. Donc, à moins que Apple ne fournisse une mise à jour, il n’existe aucun moyen direct de mettre à jour la dernière version de GNU BASH installée avec OS X. Un moyen indirect serait de le télécharger vous-même, par un moyen ou un autre, et de l'installer puis définissez-le comme votre shell par défaut. Que vous choisissiez ou non de supprimer la version livrée ou la version mise à jour Apple, c'est vous qui décidez.
user3439894

Réponses:

36

Apple ne mettra pas à jour Bash, car la dernière version est sous licence GPLv3, qu’Apple ne peut utiliser. Ils ont cependant mis à jour la plupart de leurs autres coquilles. ZSH par exemple est la plupart du temps à jour.

Références:

Après quelques recherches, cela semble être le problème principal:

Lorsque les utilisateurs distribuent des produits utilisateur contenant des logiciels sous GPLv3, la section 6 leur impose de vous fournir les informations nécessaires à la modification de ce logiciel. Produits d'utilisateur est un terme spécialement défini dans la licence; Les exemples de produits utilisateur comprennent les lecteurs de musique portables, les enregistreurs vidéo numériques et les systèmes de sécurité domestique.

Cela nécessiterait que les logiciels de source fermée, par exemple, rendent leurs parties sous licence GPL modifiables par le public, ce qui serait évidemment un problème pour Apple.

William T Froggard
la source
Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été déplacée pour discuter .
bmike
5
Cette explication n'a pas de sens. Envoyer un binaire GPL (v3 ou autre) ne signifie pas que le reste du système d’exploitation devra être publié. Le reste du système d'exploitation n'est pas lié à bash. La clause "Tivoization" pourrait expliquer pourquoi bashon ne peut pas mettre à jour une Apple TV, par exemple, mais pas vraiment un Mac de bureau. De plus, les "portions sous GPL" devraient déjà être rendues modifiables par le public; v3 ne changerait pas cela. Je pense que la clause brevets de la GPL v3 serait suffisante pour dissuader Apple de toucher au code GPL v3.
jamesdlin
Pourquoi serait-ce un problème pour Apple? Bash est déjà open source (toutes les versions ≥1.14 sont disponibles via GNU @ ftp.gnu.org/gnu/bash et la version fournie avec macOS (actuellement la version 3.2) est disponible via Apple @ opensource.apple.com/source/bash. ), mais il pourrait être modifié indépendamment.
voix
@ tjt263 Il s'agit des différences entre GPLv3 et GPLv2, utilisées par la version utilisée par Apple, toujours sous licence.
William T Froggard
3
Oui, Bash3.2 est sous licence GPLv2. Bash4.x est sous licence GPLv3. Et alors? Vous avez dit: "Apple ne mettra pas à jour Bash, car la dernière version est sous licence GPLv3, qu’Apple ne peut pas utiliser ." Pourquoi ne peuvent-ils pas? "Cela nécessiterait que les logiciels de source fermée, par exemple, confient au public la possibilité de modifier ses portions sous licence GPL , ce qui serait évidemment un problème pour Apple ." Pourquoi est-ce un problème? Ils le font déjà. C'est déjà modifiable par le public. Tous les logiciels sont. Surtout quand il s'agit de FOSS et qu'ils donnent le code source sur leur site à tous ceux qui le souhaitent.
voix
62

Est-il possible de mettre à jour bash vers la version 4.0 dans OSX Yosemite? Oui.

  1. Téléchargez / installez homebrew http://brew.sh/ en exécutant cette commande dans le terminal.

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Quittez et rouvrez votre terminal. puis tapez

    brew install bash
  3. Changez le shell par défaut via l'interface graphique du terminal avec le chemin littéral de votre nouveau bash (EDIT: je n'ai pas encore trouvé de solution de type CLI qui fonctionne)

entrez la description de l'image ici

Est-il possible de mettre à jour bash avec la version 4.0 fournie par Apple dans OSX Yosemite?

EDIT: Non. Pas de la façon dont l’opérateur demande. Par exemple, mettez à niveau l’installation actuelle en vous substituant elle-même. Il a été noté dans d'autres réponses qu'Apple n'avait pas mis à jour bash en raison de problèmes de licence. Cependant, télécharger une version séparée et mise à jour de bash et l'utiliser comme shell par défaut est la solution canonique pour la plupart des interprètes. Prenez python par exemple. Vous ne mettez pas la version 2.7 à la version 3.5, vous téléchargez une version distincte et modifiez votre valeur par défaut.

utilisateur136952
la source
12
Vous pouvez définir la valeur par défaut via le CLI avec: sudo chpass -s /usr/local/bin/bash. Remarque: Il est préférable de pointer sur le lien symbolique de /usr/local/bin/cette manière, afin que Brew puisse gérer les mises à niveau sans avoir à modifier votre environnement à chaque fois.
sansSpoon
3
Quels sont les risques d'aller avec un shell non-Apple?
Fan numéro 1 de Bjorks,
5
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'puis chsh -s /usr/local/bin/bashdéfinira le shell par défaut pour le terminal
Abhijit Sarkar
52

Comme @William l'a dit dans sa réponse, Apple ne fournit pas le bash 4 en raison des restrictions de la GPL. Vous pouvez cependant installer bash 4+ et en faire votre shell par défaut (y compris pour Terminal et iTerm2 ) en procédant comme suit.

Installez Bash 4 via Homebrew

Commencez par installer la nouvelle version de bash. Il y a différentes façons de le faire, je préfère Homebrew.

  • Installez Homebrew comme décrit sur http://brew.sh .
  • Installez bash en utilisant brew install bash.

Bash 4 est maintenant disponible sur votre PATH (en supposant que Homebrew bin est sur votre chemin). Cependant, ce n'est pas encore votre shell par défaut. Vous pouvez trouver où il se trouve en exécutant which bash. Dans mon cas c'est à /usr/local/bin/bash.

Utiliser Bash 4

Comme il se trouve sur votre PATH, vous pouvez démarrer une session Bash 4 simplement bashou vous pouvez l’utiliser dans des scripts en utilisant un Shebang .

Par exemple, cela utilisera une instance spécifique de bash.

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

Cela utilisera la première bash sur le chemin.

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

Vous pouvez également définir le chemin bash pour des profils spécifiques dans Terminal / iTerm2 en suivant les étapes décrites dans la réponse de @ user136952.

Faire de Bash 4 la valeur par défaut

Comme mentionné ci-dessus, après l’installation de Bash 4 n’est toujours pas le shell par défaut. Pour que bash soit la valeur par défaut, vous devez effectuer deux autres étapes.

Tout d’abord, ajoutez le chemin Bash 4 à votre /etc/shellsfichier pour qu’il s’agisse d’un shell de connexion autorisé. Comme décrit dans / etc / shells , ce fichier contient la liste des shells de connexion valides. Après avoir ajouté le nouveau chemin bash, on /etc/shellsdirait que:

# 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

Ensuite, nous utilisons chsh pour en faire votre shell par défaut. Ainsi, toutes les sessions de cet utilisateur utiliseront ce shell. Pour plus d'informations à ce sujet, reportez-vous à la section Modification du shell dans Terminal Mac OS X , mais la commande en question est très simple.

chsh -s /usr/local/bin/bash

Maintenant, le nouveau bash est notre shell de connexion par défaut. Si vous ouvrez Terminal ou iTerm2 et exécutez, bash --versionvous devriez voir la nouvelle version. Notez la "Licence GPLv3 +" qui explique pourquoi Apple ne l’associe pas avec 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>
studgeek
la source
2
Basé sur l'article / fil qu'il a lié à je pense qu'il voulait vraiment dire "pas par défaut" en disant pas côte à côte. Ma réponse fait 4 par défaut, donc 3 n'est plus visible. Le fait que la vieille bash prenne encore un peu d’espace disque ne me semble pas être un gros problème.
Studgeek
1
+1 par moi. Oui, OP ne veut pas cela, mais la question appartient à la communauté et si cela aide d'autres personnes, c'est génial. Il se peut que le chèque ne corresponde pas à la réponse choisie par l'OP, mais cela n'en fait pas une mauvaise réponse.
bmike
3
Sur High Sierra, sudo chpass -s /usr/local/bin/bashchange mon shell pour root / sudo uniquement. Pour changer pour mon identifiant habituel, je dois exécuter la commande sans sudo. Cela pourrait être une chose Active Directory; Je ne suis pas sûr.
Bradd Szonye
1
Au lieu d'utiliser le #!/usr/local/bin/bashshebang, examinez l'utilisation #!/usr/bin/env bash( explication ). Cela exécutera le script avec n'importe quelle version de bash accessible par l'environnement qui le lance, c'est-à-dire tout ce qui which bashrevient. C'est une solution plus portable que d'utiliser des chemins spécifiques. Nous ne pouvons pas nous attendre à ce que d'autres utilisateurs installent bash via homebrew.
Illya Moskvin
1
@IllyaMoskvin, j'ai initialement utilisé un chemin spécifique parce que je voulais montrer comment l'utiliser explicitement. J'ai mis à jour les exemples pour avoir les deux.
studgeek
0

Vous pouvez installer une autre version de Bash sans homebrew

  • Allez à GNU Bash
  • Téléchargez la version que vous voulez ( ici )
  • Et suivez les étapes ici: https://gist.github.com/samnang/1759336

    Téléchargez et installez la version de bash que vous voulez Remplacez XX (dans bash-XX) par la version de votre choix, par exemple 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

    Ajouter le nouveau shell à la liste des shell légitimes

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

    Changer le shell pour l'utilisateur

    chsh -s /usr/local/bin/bash

    Recherchez Bash 4 et / usr / local / bin / bash ...

    echo $BASH && echo $BASH_VERSION

    Vous voudrez peut-être ajouter un alias si vous voulez que la commande bash l'utilise. Placez dans votre ~ / .bash_profile

    alias bash="/usr/local/bin/bash"
Raposo
la source
-1

L'installation côte à côte avec une mise à jour de votre shell (via chsh ou l'interface graphique) échouera pour les scripts. Les scripts utilisent souvent env bash, ce qui revient à la version OS X bash. Donc, ce que vous voulez peut ne pas être la mise à jour complète de bash, mais une installation côte à côte qui renvoie toujours la version la plus récente de bash (c.-à-d. Même quand envest appelé).

Donc, pour gérer ça:

1) installer bash via Homebrew, comme l’ont indiqué les autres commentateurs

2) paramétrez votre shell de connexion sur cette nouvelle version (via l'interface graphique ou la commande chsh comme d'autres l'ont postée)

3) définissez /usr/local/bin(ou le chemin de la nouvelle version de bash) devant /binvotre variable $ PATH, en ajoutant ceci à votre ~/.bash_profile:export PATH=/usr/local/bin:$PATH

cwingrav
la source
Cela rompra les scripts attendus par la version 3 de Bash - c'est-à-dire les scripts fournis par Apple - vous devez utiliser sde à côté
utilisateur151019 le
Un bon point. Courait comme ça depuis un certain temps maintenant et sans problèmes. Peut-être qu'Apple fournit le chemin complet dans ses scripts ou que cela ne pose aucun problème. Pour les scripts de niveau système Apple, c’est-à-dire qui ne proviennent pas d’un shell, ils n’appellent jamais l’appel de .bash_profiletoute façon, de sorte que cela n’affectera que ce que vous exécuterez directement dans un terminal.
cwingrav
2
@ Mark Je ne peux pas penser à un cas où v ≥4.x briserait un script écrit pour v ≤3.x. Peut tu?
voix
-1

2019: aussi simple que dans ce post

$ brew install bash
$ sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
$ chsh -s /usr/local/bin/bash

puis onglet un nouveau terminal, profitez-en!

Feuda
la source
1
Qui a voté ma réponse sans une explication?
Feuda