I have a love-hate relationship with GNU Bash. This mainly stems from macOS shipping an ancient version of bash which is the last GPLv2 version.
$ /bin/bash --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
So, we have a few options at this point…
We could install a new version of bash:
brew install bash
Now we can see we're running bash 4.4.23, and we know that 4.4.23 > 3.2.57 because Math!
/usr/local/bin/bash --version GNU bash, version 4.4.23(1)-release (x86_64-apple-darwin17.5.0) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
However, if you are installing a new shell, you could also try out a different shell with less electrons
brew install zsh
Configure macOS Allowed Shells
Regardless of what option you chose, you need to tell macOS that it is ok to new a non-standard shell location for your default shell.
Enumerate the available shells by running:
The file will look similar to what is shown below.
# List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh
If you want to use a custom shell that you installed with Homebrew (maybe you installed the latest ZSH) then you will have to edit that file.
# If you Upgraded Bash run this... echo '/usr/local/bin/bash' | sudo tee -a /etc/shells # If you installed ZSH run this... echo '/usr/local/bin/zsh' | sudo tee -a /etc/shells
Set Your Default Shell
Note: There are a few ways to actually go about changing the login shell, a few of these options are chpass, chsh, using dscl, etc.
For this tip we will use chsh and change our login shell to zsh.
# If you Upgraded Bash run this... NEWSHELL=bash # If you installed ZSH run this... NEWSHELL=zsh chsh -s /usr/local/bin/$NEWSHELL $(whoami) Changing shell for _username_. Password for _username_:
Close and re-open Terminal.app or iTerm.app and enjoy using your new default shell!