chsh - macOS


Overview

The chsh command on macOS is used to change a user’s login shell. This command modifies the system file that stores the list of shells allowed and the default shell for each user. It is particularly useful for users who prefer to utilize a different shell than the default one provided by macOS, such as bash, zsh, or fish.

Syntax

The syntax for using chsh is as follows:

chsh [options] [shell]

Here, [shell] is the new login shell for the user’s account and is optional. If no shell is specified, chsh will switch to the default login shell.

Changing Shell for Current User

chsh -s /path/to/shell

Changing Shell for Another User (Superuser Only)

sudo chsh -s /path/to/shell username

Options/Flags

  • -s <shell>: Specify the full path of the new login shell.
  • -l: Lists all shells listed in /etc/shells which is a whitelist of valid shells.
  • -u <user>: (macOS does not support this) Typically used in other Unix systems to specify the username whose login shell is to be changed. Using it in scripts or on other systems can be considered.

Examples

  1. Changing Your Login Shell to Zsh:

    chsh -s /bin/zsh
    

    This sets the default login shell to Zsh for the current user.

  2. List Available Shells:

    chsh -l
    

    This displays all acceptable login shells on the system, which are listed in /etc/shells.

  3. Changing Another User’s Shell:

    sudo chsh -s /bin/sh otherusername
    

    A superuser can change the shell for another user to /bin/sh using this command.

Common Issues

  • Permission Denied: Users might encounter this if they attempt to change the shell without proper permissions or to an unauthorized shell not listed in /etc/shells.

    • Solution: Ensure that the shell path is listed in /etc/shells or run chsh with sudo if changing another user’s shell.
  • Invalid Shell Error: If you specify a shell that does not exist or is not recognized.

    • Solution: Always verify the shell path with chsh -l before attempting to change it.

Integration

chsh can be integrated with automation scripts or initialization setups. For instance, combine with useradd to set up user accounts with preferred shells:

useradd -m newuser && sudo chsh -s /bin/zsh newuser

This example creates a new user and sets their default shell to Zsh.

  • useradd, usermod: For adding and modifying user accounts, respectively.
  • sudo: Essential for executing commands with superuser privileges.

For further reading and deeper understanding, consult the official macOS documentation and resources related to Unix-like shell environments.