142 votes

Mise à jour de bash à la version 4.0 sur OSX

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

echo $BASH_VERSION
3.2.57(1)-release

Ce site article et ceci filetage font référence à la même question, mais ils installent une nouvelle coquille côte à côte avec l'ancienne. Existe-t-il un moyen de mettre directement à jour l'ancien shell bash ?

5 votes

Il n'y a pas besoin de faire ça. En fait, c'est toujours une bonne idée de conserver l'original. Deux versions de bash ou plus peuvent être installées en même temps, et vous pouvez définir celle que vous voulez comme étant la version par défaut.

0 votes

Essentiellement, la mise à jour logicielle d'Apple serait responsable de la modification de la version de BASH sur le système, comme elle l'a fait avec la mise à jour de BASH pour Shellshock. Ainsi, à moins qu'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 la télécharger vous-même, par un moyen ou un autre, de l'installer et de la définir comme votre shell par défaut. Que vous choisissiez ou non de supprimer la version livrée ou la version mise à jour par Apple, c'est vous qui décidez.

2 votes

Pour tous ceux qui, comme moi, viennent de Google, à partir de MacOS Catalina (10.15), vous pouvez définir l'interpréteur de commandes par défaut sur zsh assez facilement. zsh sera l'interpréteur de commandes par défaut de MacOS à l'avenir. Beaucoup de fonctionnalités similaires à bash. Et surtout, c'est une version à jour. Les étapes sont ici : support.apple.com/fr/HT208050

120voto

Comme @William l'a dit dans sa réponse, Apple ne fournit pas 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.

Installer Bash 4 via Homebrew

Installez d'abord la nouvelle version de bash. Il y a plusieurs façons de le faire, je préfère Homebrew.

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

Bash 4 est maintenant disponible sur votre PATH (en supposant que le bin Homebrew est sur votre chemin). Cependant, il est no mais 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 .

Utilisation de Bash 4

Puisqu'il se trouve sur votre PATH, vous pouvez démarrer une session Bash 4 avec seulement bash ou il peut être utilisé dans les scripts en utilisant une balise Shebang .

Par exemple, ceci va utiliser une instance spécifique de bash.

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

Ceci utilisera le premier bash sur le PATH.

#!/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 version par défaut

Comme mentionné ci-dessus, après l'installation de Bash 4 n'est toujours pas le shell par défaut. Pour faire de bash l'interpréteur de commandes par défaut, vous devez effectuer deux étapes supplémentaires.

Tout d'abord, ajoutez le chemin d'accès à Bash 4 dans votre fichier /etc/shells pour qu'il soit 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, mon /etc/shells ressemble à ce qui suit :

# 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. Vous pouvez en savoir plus à ce sujet dans Changer le shell dans le terminal Mac OS X mais la commande réelle 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 --version vous devriez voir la nouvelle version. Notez la "Licence GPLv3+" qui est la raison pour laquelle Apple ne l'intègre pas à 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>

0 votes

Il a mentionné qu'il ne voulait surtout pas l'option d'installation côte à côte.

4 votes

D'après l'article/le fil de discussion auquel il a fait référence, je pense qu'il voulait vraiment dire "pas par défaut" en disant "pas côte à côte". Ma réponse fait de 4 la valeur par défaut, de sorte que 3 n'est plus vu. Le fait que l'ancien bash occupe encore de l'espace disque ne me semble pas être un gros problème.

2 votes

+1 par moi. Oui, le PO ne le veut pas, mais la question appartient à la communauté et si cela aide d'autres personnes, c'est génial. Il se peut qu'elle ne soit pas cochée comme la réponse choisie par le PO, mais cela n'en fait pas une mauvaise réponse.

85voto

user1787331 Points 1072

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

  1. Télécharger / Installer 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 ouvrez à nouveau votre terminal, puis tapez

    brew install bash
  3. Changez l'interpréteur de commandes par défaut via l'interface du terminal avec le chemin littéral de votre nouveau bash (EDIT : je n'ai pas encore trouvé une méthode CLI qui fonctionne).

enter image description here

Est-il possible de mettre à jour bash pour La fête prévue par Apple version 4.0 dans OSX Yosemite ?

EDIT : Non. Pas dans le sens où l'op le demande. Par exemple, mettre à jour l'installation actuelle en la remplaçant elle-même. Il a été noté dans d'autres réponses qu'Apple n'a pas mis à jour bash en raison de problèmes de licence. Cependant, télécharger une version mise à jour et séparée de bash et l'utiliser comme votre shell par défaut est la solution canonique, pour la plupart des interpréteurs. Prenez Python par exemple. Vous ne mettez pas à jour la version 2.7 vers la version 3.5, vous téléchargez une version séparée et vous changez votre interpréteur par défaut.

17 votes

Vous pouvez définir la valeur par défaut via l'interface CLI avec : sudo chpass -s /usr/local/bin/bash . Remarque : Il est préférable de faire pointer le lien symbolique dans le fichier /usr/local/bin/ De cette façon, Brew peut gérer les mises à jour sans avoir à changer votre environnement à chaque fois.

5 votes

Quels sont les risques liés à l'utilisation d'une coque non-Apple ?

12 votes

sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells' puis chsh -s /usr/local/bin/bash définira le shell par défaut pour le terminal

57voto

William T Froggard Points 5321

Apple ne mettra pas à jour Bash, car la dernière version est sous licence GPLv3, qu'Apple ne peut pas utiliser. Ils ont cependant mis à jour la plupart de leurs autres shells. ZSH, par exemple, est en grande partie à jour.

Références :

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

Lorsque des personnes distribuent des produits d'utilisateur qui incluent des logiciels sous GPLv3, la section 6 exige qu'elles vous fournissent les informations nécessaires pour modifier ces logiciels. Le terme " User Products " est un terme spécialement défini dans la licence ; des exemples de User Products incluent les lecteurs de musique portables, les enregistreurs vidéo numériques et les systèmes de sécurité domestiques.

Pour cela, il faudrait que les logiciels à code source fermé, dont les parties sont sous GPL, puissent être modifiés par le public, ce qui serait évidemment un problème pour Apple.

0 votes

Les commentaires ne sont pas destinés à une discussion approfondie ; cette conversation a été déplacé vers le chat .

11 votes

Cette explication n'a pas de sens. La publication d'un binaire sous GPL (v3 ou autre) ne signifie pas que le reste du système d'exploitation doit être publié. Le reste du système d'exploitation ne lien à bash . La clause de "Tivoïsation" pourrait expliquer pourquoi bash ne peut pas être mis à jour sur, disons, une Apple TV, mais pas vraiment sur un Mac de bureau. De plus, les "portions sous GPL" doivent déjà être rendues modifiables par le public ; la v3 ne changerait pas cela. I croirait que le brevets de la GPL v3 serait suffisante pour dissuader Apple de toucher au code GPL v3.

0 votes

Pourquoi cela serait-il 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 & la version incluse avec MacOS (actuellement v3.2) est disponible via Apple @ opensource.apple.com/source/bash ), mais il pourrait être modifié de toute façon.

2voto

cwingrav Points 119

L'installation côte à côte avec une mise à jour de votre shell (via chsh ou l'interface graphique) échouera pour scripts. scripts utilisent souvent env bash qui revient à la version bash de l'OS X. Donc, ce que vous voulez n'est peut-être pas 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'est-à-dire même lorsque env est invoquée).

Donc, pour gérer ça :

1) installer bash via Homebrew, comme l'ont fait les autres commentateurs

2) Définissez votre shell de connexion à cette nouvelle version (via l'interface graphique ou la commande chsh comme d'autres l'ont fait).

3) fixer /usr/local/bin (ou le chemin d'accès à la nouvelle version de bash) en amont de /bin sur votre variable $PATH, en ajoutant ceci à votre fichier ~/.bash_profile : export PATH=/usr/local/bin:$PATH

0 votes

Cela va casser les scripts qui attendent la version 3 de bash - c'est-à-dire les scripts fournis par Apple - vous devez utiliser sde en parallèle.

1 votes

Un point juste. Je fonctionne comme ça depuis un certain temps maintenant et aucun problème. Peut-être qu'Apple fournit le chemin complet dans ses scripts ou bien il n'a tout simplement pas rencontré de problème. Pour les scripts au niveau du système d'Apple, c'est-à-dire pas à partir d'un shell, il n'appelle jamais la fonction .bash_profile de toute façon, cela n'aurait d'impact que sur ce que vous exécutez directement dans un terminal.

5 votes

@Mark Je ne peux pas penser à un cas où la v 4.x casserait un script écrit pour la v 3.x. Le pouvez-vous ?

2voto

Raposo Points 11

Vous pouvez installer une autre version de Bash sans homebrew

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

    Téléchargez et installez la version de bash que vous voulez Remplacez X.X (dans bash-X.X) par la version que vous voulez, 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 legit shells

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

    Changer le shell pour l'utilisateur

    chsh -s /usr/local/bin/bash

    Vérifier pour Bash 4 et /usr/local/bin/bash...

    echo $BASH && echo $BASH_VERSION

    Vous pouvez ajouter un alias si vous voulez que la commande bash l'utilise. Placez dans votre ~/.bash_profile

    alias bash="/usr/local/bin/bash"

1 votes

Cela me semble être une bonne approche, mais je me pose la question suivante : Pourquoi ne pas simplement remplacer l'antiquité /bin/bash ? Est-ce parce qu'il est nécessaire pour la compatibilité avec d'autres logiciels "anciens" qu'Apple distribue dans MacOS ?

1 votes

Cela va vider tous les répertoires d'installation dans /usr/local . Si vous préférez qu'ils soient organisés dans une bash-X.X répertoire, append /bash-X.X au paramètre préfixe dans le ./configure comando.

1 votes

@Seamus vous n'êtes pas autorisé à modifier la /bin à moins que vous ne désactiviez SIP .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X