Regardez aquí pour l'excellente explication et solution postées par @mklement0 [en relation avec une bash
problème de mise à niveau.
J'ai eu un problème similaire en faisant l'inverse sur mon système (OS X 10.10.1) : en faisant bash
le shell de connexion par défaut après avoir installé oh-my-zsh
qui a fait zsh
la valeur par défaut, puis la mise à niveau bash
de la 3.2.53 à la 4.3.30 en utilisant Homebrew (pourquoi Apple livre-t-il Yosemite avec une ancienne version de la bash
version ?).
Je pense que le SHELL
reflète la variable d'environnement mais ne pas contrôle le shell de connexion par défaut de l'utilisateur. Par exemple, si, disons, bash
était votre valeur par défaut et vous ouvrez une nouvelle bash
fenêtre shell à partir du terminal puis $ export SHELL="/bin/zsh"; echo "$SHELL"
montrerait /bin/zsh
mais aucun changement réel ne se produira, car si vous ouvrez une nouvelle fenêtre shell à partir du terminal et faites $ echo $0
alors vous verrez -bash
( $0
contient le nom et le chemin de la commande qui a lancé la fenêtre du shell, dans ce cas-ci bash
et le -
à côté d'elle indique qu'il s'agit d'un shell de connexion).
Comme @mklement0 l'a souligné, le shell de connexion par défaut de l'utilisateur est contrôlé par l'option UserShell
la propriété de l'enregistrement de l'utilisateur dans la base de données interne du système, qui peut être interrogée et mise à jour à l'aide de l'utilitaire de ligne de commande. dscl
. Ces informations seront transmises à votre application terminal lorsque vous ouvrirez une fenêtre shell.
Quoi chsh -s /bin/zsh
fait est de changer ceci UserShell
pour la définir comme zsh
- vous pouvez le vérifier en faisant dscl . -read /Users/$USER/ UserShell
immédiatement après, et vous verrez UserShell: /bin/zsh
. Mais le changement est pas dans la fenêtre actuelle, jusqu'à ce que vous fassiez quelque chose comme exec su - $USER
comme suggéré par @mklement0, ou jusqu'à ce que vous fermiez et ouvriez une fenêtre shell.
1 votes
Avez-vous regardé dans
/etc/shells
? Le manuel indique que si l'interpréteur de commandes que vous spécifiez n'est pas dans ce fichier, il n'est pas considéré comme un interpréteur de commandes standard.0 votes
Votre vrai problème n'est pas de changer le $SHELL, mais votre véritable shell par défaut en
iTerm
. La variable est construite au shell de connexion à partir du shell par défaut utilisé pariTerm
.0 votes
Pourriez-vous marquer votre réponse comme correcte pour marquer la question comme répondue ? Vous pouvez marquer votre propre réponse comme étant une solution. Merci !