Est-il prudent de mettre à niveau Bash via Homebrew?


82

Je suis nouveau sur OS X. J'utilise OS X Lion sur un MacBook Pro. Est-il prudent de mettre à niveau le shell bash avec Homebrew:

$ brew install bash

Si c'est sûr, comment puis-je en faire l'instance par défaut du shell que je lance via Terminal?

Merci!


2
Cette question est soudainement devenue extrêmement pertinente, voir Shellshock
ecnepsnai

Oui. 10 caractères
minuscule

Réponses:


105

Les /{,usr/}{,s}bin/fichiers binaires de ne doivent généralement pas être remplacés par d'autres fichiers. D'autres programmes s'attendent à ce qu'ils soient les versions fournies avec OS X et sont remplacés par des mises à niveau du système d'exploitation.

Après avoir exécuté brew install bash, vous pouvez changer le shell par défaut en toute sécurité en:

  • Ajout /usr/local/bin/bashà/etc/shells
  • En cours d'exécution chsh -s /usr/local/bin/bash.

Les paramètres dans Terminal ou iTerm 2 ne doivent normalement pas être modifiés. Par défaut, ils ouvrent de nouvelles fenêtres avec un shell de connexion du shell par défaut.

Le shell par défaut peut également être modifié depuis les Préférences Système ou avec dscl, mais les trois options ne font que modifier /var/db/dslocal/nodes/Default/users/$USER.plist.


On dirait que cela a fonctionné, et si je rencontre des problèmes, il devrait être facile de revenir en arrière! Merci!
Rudy

ne savait pas que la page d'option avancée était là. Sucré!
Lemonginger

2
Le bit sur l'édition /etc/shellspour inclure le bash installé par brass est requis. Sinon (au moins sur ma machine), le terminal refusera de démarrer.
Brendanjerwin

2
La troisième commande (csh -s) semble ne plus être nécessaire sur Mavericks 10.9.2.
Brent Faust

2
Je devais juste brew install bashpour que cela fonctionne. (c'est-à-dire qu'il n'a pas eu à modifier /etc/shells)
Daniel

4

Je peux me tromper ici, mais pour autant que je sache brew, il installerait sa propre instance de bash, puisque brew fonctionne sous /usr/local/binpendant que les paramètres par défaut du système fonctionnent sous /bin(et /usr/bin).

À propos de Terminal, vous pouvez ouvrir des coques avec votre propre commande personnalisée. Allez dans Préférences> Démarrage et sélectionnez les coquilles ouvertes avec: Commande (chemin complet) . Il suffit de taper le chemin d'accès à votre nouvelle bashet vuala!

J'espère que ça aide!

BTW: Sauvegarde! Le meilleur conseil dans cette situation!


hé, vous savez quoi, cette réponse fonctionne à merveille
castiel

0

Bien avant de faire quoi que ce soit, sauvegardez votre fichier actuel (bien sûr, mais mérite toujours d'être dit)

sudo cp /bin/bash /bin/bash.3.2.bk

Créez ensuite un lien symbolique vers l'exécutable bash téléchargé par Homebrew. Je pense que ce sera dans / usr / local / Cellar, comme ça

sudo ln -s /usr/local/Cellar/bash/4.2.10/bin/bash /bin/bash

Maintenant, / bin / bash pointe vers le fichier dans votre répertoire usr / local


3
L'inconvénient de placer une nouvelle bash dans la version système est que toute mise à jour du système d'exploitation peut effacer votre shell préféré. Vraisemblablement, l'OP veut utiliser de nouvelles fonctionnalités qui pourraient casser si le système d'exploitation installe une version "plus récente de l'ancien système d'exploitation" mais "plus ancienne que personnalisée" de bash. Mieux vaut changer le chemin par défaut ou la variable shell utilisateur.
bmike

Eh bien, vous pouvez simplement créer un nouveau lien simlink car il ne remplacerait pas la version de bash dans votre répertoire usr / local. mais vous avez raison, la voie de Daniel est probablement meilleure
lemonginger

Ooh - éditez votre réponse s'il vous plaît pour mettre cela en premier (et conservez l'idée originale si vous préférez comme seconde alternative - j'aime ça beaucoup mieux et aimerais une chance d'annuler mon vote :-)
bmike

1
hmm, ben c'est / c'est / ce que j'ai dit, mais j'ai édité pour essayer de clarifier ce que chaque étape fait un peu mieux. Je pense toujours que la réponse la mieux notée est probablement meilleure :)
lemonginger

Cela semble être un moyen assez dangereux de changer le shell du système.
Samuel Mikel Bowles

0

Je pense qu'il est prudent si vous venez de lancer

brew install bash

puis ajoutez-le comme shell par défaut

chsh -s /usr/local/bin/bash

puisque vous ne faites que modifier votre utilisateur actuel. Cependant, j'ai remarqué que mon ~ / .profile par défaut est

if [ "/bin/bash" == $BASH ]; then
    source ~/.bashrc
fi

il faut donc le mettre à jour. Je l'ai changé pour

if [ "bash" == $(basename $BASH) ]; then
        source ~/.bashrc
fi

Voir les autres réponses pour savoir pourquoi chshseul ne suffit pas. De plus, votre extrait de .profile mis à jour est identique à l'original
nohillside

@patrix: merci de le signaler, j'ai mis à jour le deuxième extrait. Ce serait bien si brew install bashcela ne nécessitait aucune action supplémentaire. Avec le profil mis à jour que j'ai partagé, ce n'est pas le cas. J'espère que cela peut aider les autres.
Gianluca Casati
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.