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?
From Terminal:
Add Fish to /etc/shells
, which will require an administrative password:
sudo echo /usr/local/bin/fish >> /etc/shells
Make Fish your default shell with chsh
:
chsh -s /usr/local/bin/fish
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
On macOS Mojave I had to do the following (using zsh as an example):
brew install zsh
sudo sh -c "echo $(which zsh) >> /etc/shells"
chsh -s $(which zsh)
You can use chsh to change a user's shell.
Run the following code, for instance, to change your shell to Zsh
chsh -s /bin/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
.
How to get the latest version of bash on modern macOS (tested on Mojave).
brew install bash
which bash | sudo tee -a /etc/shells
chsh -s $(which bash)
Then you are ready to get vim style tab completion which is only available on bash>=4 (current version in brew
is 5.0.2
# If there are multiple matches for completion, Tab should cycle through them
bind 'TAB':menu-complete
# Display a list of the matching files
bind "set show-all-if-ambiguous on"
# Perform partial completion on the first Tab press,
# only start cycling full results on the second Tab press
bind "set menu-complete-display-prefix on"
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
.
The only thing that worked for me was a combination of all these methods.
First I had to add fish to the /etc/shells
file
Then I ran chsh -s /usr/local/bin/fish
Finally, I typed Command+, and added /usr/local/bin/fish
to the default path there
Only after I had done all three things did fish start popping up as the default for new terminal windows.