I'm trying to permanently change my shell to zsh using chsh command, but it's not working.

zsh is installed (via apt) and works fine when I invoke it directly from a bash prompt terminal. But I can't get zsh to load in terminals by default, and chsh is doing something weird:

$> echo $SHELL
$> which zsh
$> chsh -s /usr/bin/zsh
$> echo $SHELL
$> grep kurtosis /etc/passwd

It appears chsh has managed to correctly change /etc/passwd, but not the $SHELL env variable. As such, new terminals always start in bash and not zsh.

I'm not sure where to look to troubleshoot this. .bashrc, even though it's not invoked until the shell is specified? Any help appreciated.

  • 1
    Cannot you change shell after you re-logged in the system? – vine_user Oct 2 '12 at 2:29

You need to log out again for these changes to take effect. The shell defined in the /etc/passwd file is your login shell :-) So you need to log in actually for that.

  • 2
    Thanks. I'm so used to being able to make changes to linux without rebooting, it just didn't occur to me. – Kurtosis Oct 3 '12 at 0:07
  • I had to actually do a reboot for it to take effect - I guess it was somehow re-connecting me to an existing shell session. – Chris Kimpton Feb 13 '16 at 18:36
  • While using an ssh connection, even if you do exit, the server may not close the connection and the shell all the way through. So, you may need to kill the processes (ssh and sh) that belong to your user. (I had this problem and it was easy to find the solution but still, I had to come to this post to see that I had to logout.) – John Hamilton Aug 2 '18 at 5:46

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.