I do not like to retype fish every time I start terminal. I want fish
on by default. How can I set fish shell as my default shell on a Mac?
I do not like to retype fish every time I start terminal. I want fish
on by default. How can I set fish shell as my default shell on a Mac?
Mac OS X: How to change the Terminal shell
the
chsh
program will let you change your default shell. It will want the full path to the executable, so if your shell isfish
then it will want you to provide the output given when you typewhich fish
.You’ll see a line starting with “
Shell:
“. If you’ve never edited it, it most likely says “Shell: /bin/bash
“. Replace that/bin/bash
path with the path to your desired shell.just change that value (with the write command in
dscl
).You can use chsh to change a user’s shell.
Run the following code, for instance, to change your shell to Zsh
As described in the manpage, and by Lorin, if the shell is not known by the OS, you have to add it to its known list:
/etc/shells
.When in the terminal, open the terminal preferences using Command+,.
On the Setting Tab, select one of the themes, and choose the shell tab on the right.
You can set the autostart command
fish
.Here’s another way to do it:
Assuming you installed it with MacPorts, which can be done by doing:
Your shell will be located in
/opt/local/bin/fish
.You need to tell OSX that this is a valid shell. To do that, add this path to the end of the
/etc/shells
file.Once you’ve done this, you can change the shell by going to System Preferences -> Accounts. Click on the Lock to allow changes. Right-click on the account, and choose “Advanced Options…”. In the “Login shell” field, add the path to fish.
Homebrew on M1 macs should use
/opt/homebrew
instead of/usr/local
.You can check the fish location
which fish
. For me the fish was in/opt/homebrew/bin/fish
which was the location I have added toetc/shells
edit .zshrc and change it to
exec /bin/bash
or to whatever shell you might prefer.
Bonus: this doesn’t require root access and will work on every version of osx.
The only problem is that it doesn’t read .bash_profile this way; it is only read if bash is run as an interactive login shell, you would have to include it from .bashrc with something like this:
To change your default shell on mac run the following:
List of shells you can choose from are:
so if you want to change from to the /bin/zsh shell, your command will look like:
you can see all the available shells on your system by running:
This work for me on fresh install of mac osx (sierra):
On macOS Mojave I had to do the following (using zsh as an example):
In case you are having troubles with the other ways, worked on mac Mojave but should generally work.
add the output path to “System Preferences > Users & Groups > right click user, Advanced Options” Paste the result from which into “Login shell:”
How to get the latest version of bash on modern macOS (tested on Mojave).
Then you are ready to get vim style tab completion which is only available on bash>=4 (current version in
brew
is 5.0.2These are applicable to MacOS Sierra 10.12.5 (16F73) and probably some other recent and upcoming versions of MacOS.
chsh
is not enough to change the default shell. Make sure you press Command+, while your terminal is open and change the ‘Shells open with’ option to ‘Default login shell.’In case of bash, make sure that you execute
echo $BASH_VERSION
to confirm you are running the intended version of bash.bash --version
does not give you correct information.Terminal.app >
Preferences
>General
>Shells open with:
>/bin/fish
/usr/local/bin/fish
.See this screenshot where
zsh
is being set as default.I am using macOS Sierra. Also works in macOS Mojave.
1. sudo nano /etc/shells

2. add /usr/local/bin/fish to your list of shells

3. chsh -s /usr/local/bin/fish
From Terminal:
Add Fish to
/etc/shells
, which will require an administrative password:Make Fish your default shell with
chsh
:From System Preferences:
User and Groups → ctrl-click on Current User → Advanced Options…
Change Login shell to
/usr/local/bin/fish
Press OK, log out and in again
The only thing that worked for me was a combination of all these methods.
First I had to add fish to the
/etc/shells
fileThen I ran
chsh -s /usr/local/bin/fish
Finally, I typed Command+, and added
/usr/local/bin/fish
to the default path thereOnly after I had done all three things did fish start popping up as the default for new terminal windows.