The default shell in FreeBSD is sh and I really can't stand it: autocomplete is very limited, and rehash commands kill me. I feel like a one armed and one legged man...

How can I change the shell globally to zsh or bash - for root and for all current and future users?

  • 1
    Just tried this to update an existing user in FreeBSD 9.1 and the system prompted me to use the following: chpass -s /usr/local/bin/bash USER
    – commbot
    Feb 26, 2013 at 7:18

1 Answer 1


For existing users, use the chsh command (“change shell”):

chsh -s SHELL USER
chsh -s /usr/local/bin/bash root

For future users:

  • Edit "/etc/pw.conf" defaultshell keywords
  • When use adduser(), choose necessary shell
  • 17
    ...but be careful about changing the root shell to something from the ports tree (e.g., /usr/local/bin/bash), because if you screw something up during a port upgrade you may find yourself without root access.
    – larsks
    Jan 29, 2011 at 14:50
  • 2
    s/feature/future/? Jan 29, 2011 at 14:58
  • larsk: zsh can be build statically right..? [at least I saw parameter in "make config"] so as far as I understand, it's a binary with all dependencies build in? so can I put /usr/local/bin/zsh to /bin/zsh ? root user can use old version it's ok.. then it would be safe?
    – holms
    Jan 29, 2011 at 15:27
  • 8
    Building it statically and copying it into /bin is probably the safest thing you can do. I just leave root's shell set to /bin/sh and then exec bash on those rare occasions when I really need to log in as root (more often I just use sudo from my user account).
    – larsks
    Jan 29, 2011 at 15:33
  • Note this must be run as root (or with sudo). Jan 7, 2016 at 1:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .