top of page

How to Change the Default Shell to Bash on macOS BigSur

From the Terminal

To change a user account’s default shell on macOS, simply run the chsh -s (change shell) command in a Terminal window.

Change the default shell to Bash by running the following command:

chsh -s /bin/bash

You’ll have to enter your user account’s password. Finally, close the Terminal window and reopen it. You’ll be using Bash instead of Zsh.

After that just close terminal and open it again.

If you like to change your bash terminal and create some shortcuts just create .bashrc file. Any changes make to that file effects bash.

Create .bashrc file

To create a .bashrc file, open your Mac Terminal and run this command:

touch ~/.bashrc

When you create bash files they will typically be located at the root directory of your Mac user account:


Since bash files are hidden files by default, you can use this list command to show them inside your Terminal:

ls -lha

Open .bashrc via the nano editor

To open your new .bashrc file, you can use the built-in GNU nano editor(mostly referred to as “nano”).

Run this command inside your terminal to open your .bashrc file via nano:

nano ~/.bashrc

After opening the file inside nano, you can edit it.

Warning: be careful when making changes to any bash script file, or any hidden file in general. If you follow a tutorial that requires modifying bash files, make sure you pay attention to the instructions you get, so you don’t screw anything up. If you’re in doubt, EXIT without saving your changes.

Save and quit Nano

If you have added anything to your bash files via nano, you can save and quit your data like this:

  • First hit ctrl + x

  • Then hit y (yes) to confirm you want to save the changes.

  • Then hit enter to exit the nano editor.

Quit nano without saving:

  • First hit ctrl + x

  • Then hit n (no) to confirm that you want to quit without saving changes.

If you like to make your bash look alike ubuntu you can find bashrc file for ubuntu. I have whole script here. You can just copy and paste into .bashrc file and save it

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
 debian_chroot=$(cat /etc/debian_chroot)

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
 xterm-color) color_prompt=yes;;

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt

if [ -n "$force_color_prompt" ]; then
 if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
 # We have color support; assume it's compliant with Ecma-48
 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
 # a case would tend to support setf rather than setaf.)

if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
 test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
 alias ls='ls --color=auto'
 #alias dir='dir --color=auto'
 #alias vdir='vdir --color=auto'

 alias grep='grep --color=auto'
 alias fgrep='fgrep --color=auto'
 alias egrep='egrep --color=auto'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# alias for clear
alias cls='clear'

# Add an "alert" alias for long running commands. Use like so:
#  sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
 . ~/.bash_aliases

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
 . /etc/bash_completion

After that just reload .bashrc file with this command

. ~/.bashrc

80 views0 comments
bottom of page