chsh ne change pas $ SHELL

9

J'ai des difficultés à changer la valeur de $SHELLl'application iTerm d'OSX. iTerm démarre /bin/zsh, mais la valeur de $SHELLne semble pas changer.

Ce que j'ai fait:

  1. Modification de la "commande" comme /bin/zshdans la fenêtre de configuration d'iTerm.
  2. Exécuté chshpour changer le shell en /bin/zsh.
  3. ITerm confirmé a démarré en /bin/zsh

REMARQUE # 1: Dans l'application de terminal stock OSX, "Terminal.app":

echo $SHELL
/bin/zsh

REMARQUE # 2: Dans l'application de terminal populaire d'OSX, "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
melvynkim
la source
1
Avez-vous regardé /etc/shells? Le manuel indique que si le shell que vous spécifiez n'est pas dans ce fichier, il n'est pas considéré comme un shell standard.
Bob Dalgleish

Réponses:

5

Le problème était les paramètres conflictuels de l'application "iTerm" avec le shell. Pour résoudre ce problème, j'ai réinitialisé la commande "login shell" dans la fenêtre de préférence iTerm:

iTerm.app -> Préférences -> Profils -> Général -> Commande -> Cliquez sur "Login shell"

Ensuite, j'ai exécuté chshpour le modifier en tant que /bin/zsh.

Pour reproduire le problème (avec $ SHELL défini comme /bin/bash/, même si le shell de connexion l'est /bin/zsh), je devais juste changer le paramètre "iTerm" en "Command: / bin / zsh /".

melvynkim
la source
1

L' -sindicateur pour chshseulement tente de changer le shell, et échoue probablement à cause d'Open Directory: le système UNIX habituel 'chsh' modifierait l' /etc/passwdentrée. Cependant, j'ai pu exécuter chshsans arguments, ce qui m'a donné un éditeur et les informations suivantes:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

J'ai pu modifier l'entrée "Shell:" dans /bin/zsh, et les fenêtres de terminal suivantes se sont ouvertes avec une invite Z-shell.

Nevin Williams
la source
J'ai essayé chshsans argument. Toujours pas de chance. La variable ne change pas. En fait, lorsque l'éditeur a été chargé, il l'a montré /bin/zsh.
melvynkim
Essayez de changer le shell avec l'éditeur. J'ai fait une capture d'écran de moi en passant de / bin / tcsh à / bin / zsh et vice-versa. bonmot.ca/~nevin/chsh.mov
Nevin Williams
Merci beaucoup d'avoir pris votre temps d'enregistrement en publiant votre screencast! Votre solution est censée fonctionner sur d'autres émulateurs de terminaux, mais je n'étais pas en mesure de changer $SHELLsur iTerm. Veuillez vous référer à ma réponse pour plus de détails .. Merci!
melvynkim
1

Recherchez ici l'excellente explication et solution publiée par @ mklement0 [en relation avec un bashproblème de mise à niveau.

J'ai eu un problème similaire en faisant le contraire sur mon système (OS X 10.10.1): refaire bashle shell de connexion par défaut après avoir installé oh-my-zsh, ce qui a fait zshla valeur par défaut, puis passer bashde 3.2.53 à 4.3.30 en utilisant Homebrew ( pourquoi Apple expédie Yosemite avec une ancienne bashversion?).

Je pense que la SHELLvariable d'environnement reflète mais ne contrôle pas le shell de connexion par défaut réel pour l'utilisateur. Par exemple, si, par exemple, bashétait votre valeur par défaut et que vous ouvrez une nouvelle bashfenêtre de shell à partir du terminal, alors $ export SHELL="/bin/zsh"; echo "$SHELL"apparaîtra /bin/zshmais aucun changement réel ne se produira parce que si vous ouvrez une nouvelle fenêtre de shell à partir du terminal et faites- $ echo $0le, vous verrez -bash( $0contient le nom et le chemin de la commande qui a démarré la fenêtre du shell, dans ce cas bash, et le -suivant indique qu'il s'agit d'un shell de connexion).

Comme @ mklement0 l'a souligné, le shell de connexion par défaut réel pour l'utilisateur est contrôlé par la UserShellpropriété dans l'enregistrement de l'utilisateur dans la base de données interne du système - cela peut être interrogé et mis à jour à l'aide de l'utilitaire de ligne de commande dscl. Ces informations seront transmises à votre application de terminal lorsque vous ouvrez une fenêtre shell.

Qu'est chsh -s /bin/zsh- ce que c'est de changer cette UserShellpropriété pour la définir zsh- vous pouvez le vérifier en faisant dscl . -read /Users/$USER/ UserShellimmédiatement après, et vous verrez UserShell: /bin/zsh. Mais la modification n'est pas effectuée dans la fenêtre actuelle, jusqu'à ce que vous fassiez quelque chose comme exec su - $USERsuggéré par @ mklement0, ou jusqu'à ce que vous fermiez et ouvriez une fenêtre shell.

ramius
la source
0

Essayez d'exécuter la commande: chsh -s /bin/zshdepuis le terminal Mac par défaut.

mohitmayank
la source
1
Qu'est-ce que cela fait différemment du PO?
JMY1000
@ JMY1000 Si vous essayez d'exécuter cette commande depuis iTerm, les modifications ne sont pas reflétées. Vous devriez pouvoir le faire fonctionner en l'exécutant à partir du terminal par défaut de Mac.
mohitmayank