How do I set my shell in Mac OS X?

21,682

Solution 1

Use the chsh utility like so:

chsh -s bash

Apple has changed chsh a bit on Mac OS X compared to the chsh you'd see in Linux for example. You can read up on theirs in the chsh Mac OS X Man Page.

Solution 2

Note that you will only be allowed to change to a shell listed in /etc/shells. This is normally fine, but it means that if you want to install Bash 4 (from Homebrew, MacPorts, or compiling your own), you need to add a line to /etc/shells. (I ran into this a few weeks ago, and figured it might help others to know...)

Edit: Tim Smith points out that you can get around the /etc/shells limitation if you run chsh as root via sudo. E.g. sudo chsh -s /usr/local/bin/my_shell $USER will work, even if my_shell is not listed in /etc/shells. I prefer to edit /etc/shells, but in the end, it's one use of sudo either way since you can't edit /etc/shells as a regular user. So perhaps six of one, half dozen of the other.

Solution 3

To do this using the Mac OS X GUI:

  1. Open “System Preferences.”
  2. Open the “Accounts”/“Users & Groups” preference pane and unlock the preference pane if applicable.
  3. On the user you wish to change the shell, control+click or right click on the user and choose “Advanced Options…”
  4. Where it says “Login Shell:” change this to the shell you wish to use.

Of note, this location is where you can change your home directory, UUID, User ID, Group ID, and short name if you're uncomfortable with the Terminal. There is a similar question located here as well.

Solution 4

Using the answers above I was getting an error message:

$ chsh -s zsh
Changing shell for myuser.
Password for myuser:
chsh: zsh: non-standard shell

To work around this:

sudo chsh -s zsh $(whoami)

whoami in a subshell is to change the shell for your user, not the root.

One more thing if you're using homebrew. When you run commands as root (using sudo), zsh points to /bin/zsh, which comes with OSX and might be outdated. To use the up to date one that is installed via homebrew, use the following:

sudo chsh -s $(which zsh) $(whoami)
Share:
21,682

Related videos on Youtube

nall
Author by

nall

My background is in hardware design verification and EDA tools. Most notably I'm one of the authors of Jove, a set of Java libaries to aid in design verification of chips.

Updated on September 17, 2022

Comments

  • nall
    nall over 1 year

    I know I can set "Shells open with" in the Terminal preferences, but I'm curious if there's any system-wide way of setting this (similar to updating /etc/passwd in some Unixes).

  • nall
    nall over 14 years
    And here I figured it was something complicated with some OSX-specific utility, heh. Thanks.
  • akira
    akira over 14 years
    @john - nicely learned :)
  • John T
    John T over 14 years
    Yeah I knew the answer last time too, I was just beaten to it! :(
  • ma11hew28
    ma11hew28 over 8 years
    Why change /etc/shells if you don't have to? For sanity, I prefer to keep system files the same.
  • Telemachus
    Telemachus over 8 years
    @MattDiPasquale I'm not sure what you mean by "sanity". /etc/shells is the file on the system that defines recognized shells. I change that file because I want to add a shell to the list of recognized shells. Seems pretty reasonable to me.
  • RyBolt
    RyBolt almost 8 years
    Good alt. way , for some reason chsh would not work for me . I got this ; chsh: bash: non-standard shell
  • Telemachus
    Telemachus over 7 years
    @RyBolt Right: the reason is probably what I mention in the answer. You can't use chsh alone if you're trying to use a shell that isn't listed in /etc/shells.
  • RyBolt
    RyBolt over 7 years
    @Telemachus , I was just trying to change to the original bash shell that came with my default Mac OSX build. Maybe it's not in /etc/shells which seems strange to me.
  • Telemachus
    Telemachus over 7 years
    @RyBolt The original default bash should be in /etc/shells. You can test by running cat /etc/shells. My guess is that when you tried, you entered only the word bash. That won't work. You need to enter the whole path, namely /bin/bash.
  • Daniel W.
    Daniel W. about 4 years
    The link doesn't work anymore. Do I have to restart the system to take effect for this?