119

I know Catalina uses zsh as the default login shell and interactive shell, but it is very annoying when I open iTerm.app or run command with /bin/bash, it shows verbose message like below:

$ /bin/bash
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.

The support document the message links to is https://support.apple.com/kb/HT208050

How can I hide the verbose logging? I do not want to be reminding that the "default interactive shell is now zsh" every time I open Terminal.

166

I found the solution on reddit. The solution is also mentioned in the "How to use a different shell without changing the default" section of the Apple support article mentioned in the bash warning: https://support.apple.com/en-us/HT208050/.

Add:

export BASH_SILENCE_DEPRECATION_WARNING=1

to $HOME/.bash_profile, $HOME/.profile or $HOME/.bashrc and restart iTerm. After that, the warning message will be gone.

5
  • 26
    Note that this is also listed in the "For more details" link that's in that very warning ;)
    – scohe001
    Oct 10 '19 at 12:31
  • 3
    Just a comment - this didn't work for me in either .profile or .bash_profile in iTerm so I added it to .bashrc which did work. A bit embarrassed that I searched before actually reading the link in the message... :-)
    – piit79
    Nov 26 '19 at 9:51
  • @scohe001 — Updated the answer to make mention of this
    – M. Justin
    Feb 25 '20 at 6:45
  • This didn't work for me. In macOS 10.15. I had to add it to /etc/profile instead, per @nverkland .
    – LexH
    Sep 3 '20 at 12:41
  • 1
    @piit79 That's because LOGIN shells run ~/.bash_profile and all other non-login shells run .bashrc. It is not uncommon for the last line of your .bash_profile to be something like [[ -f ~/.bashrc ]] && source ~/.bashrc Jun 16 at 18:49
34

Apple's /bin/bash is fairly antiquated (currently v3.2.57). I just switch to use the bash shipped by homebrew (currently v5.0.18), which will incidentally also remove that deprecation warning.

Steps:

  1. Install Homebrew if you haven't already.
  2. Install the latest bash shell with Homebrew:
brew update && brew install bash
  1. If you have an Apple Intel computer, change the shell like this:
sudo chsh -s /usr/local/bin/bash $(whoami)

Or if you have Apple Silicon (e.g. M1):

sudo chsh -s /opt/homebrew/bin/bash $(whoami)
3
  • This did not work for my Catalina upgrade with Homebrew: "GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin18.6.0)". I had to set the environment variable.
    – Glenn
    Dec 11 '20 at 19:29
  • 2
    Worked on Big Sur. I was a bit lazy and did: sh brew update && brew install bash && sudo chsh -s `which bash` $(whoami) But I wouldn't expect that to make any difference. I didn't need to set BASH_SILENCE_DEPRECATION_WARNING.
    – dlu
    Feb 20 at 23:49
  • 1
    If you add the new bash to the list of approved, standard shells in /etc/shells, then you wouldn't need to be a superuser to chsh -s /usr/local/bin/bash. With the sudo chsh ... the superuser can set your shell to anything.
    – Dave X
    Jul 28 at 20:04
12

I found that becoming root, then adding the deprecation suppression in /etc/profile was more reliable. I was already using ZSH and I was getting the warning every time I opened a new console. Terribly annoying. /etc/profile now reads as follows:


    # System-wide .profile for sh(1)
    export BASH_SILENCE_DEPRECATION_WARNING=1
    
    if [ -x /usr/libexec/path_helper ]; then
            eval `/usr/libexec/path_helper -s`
    fi
    
    if [ "${BASH-no}" != "no" ]; then
            [ -r /etc/bashrc ] && . /etc/bashrc
    fi
2
  • This is a good way to disable the warning for all users on the computer. My choice also!
    – Jay Lieske
    Jun 18 at 16:27
  • 1
    Note that on macOS 10.15 "Catalina" the /etc/profile file has permissions 444. Change the permissions to 644 as root before editing the file and change back to 444 afterwards if you want. Jun 22 at 13:28
5

I did a bit of digging and found the extra text (I did read the URL given in the message but missed the line for export BASH_SILENCE_DEPRECATION_WARNING=1)

The issue is that the text you see comes from Apple's version of /bin/bash

strings /bin/bash | grep default shows the text.

So to use bash I would add a newer bash from another source and use that in chsh. I would use a different bash anyway as the Apple version is over 10 years old

Looking at Apple's code for macOS 11.3 in shell.c (Apple don't seem to have released it for 11.4 yet)

Apple have added amoungst other additions

#ifdef __APPLE__
  if (interactive_shell && !act_like_sh) {
      char const * const silence_warning = getenv("BASH_SILENCE_DEPRECATION_WARNING");
      if (!silence_warning || *silence_warning != '1') {
          struct stat sbuf;
          if (stat("/bin/zsh", &sbuf) == 0) {
              fprintf(stderr, "\n"
                              "The default interactive shell is now zsh.\n"
                              "To update your account to use zsh, please run `chsh -s /bin/zsh`.\n"
                              "For more details, please visit https://support.apple.com/kb/HT208050.\n");
          }
      }
  }
#endif

So setting BASH_SILENCE_DEPRECATION_WARNING will remove this (but see the comment on bash being an old version so I would not advise this)

4
  • Thanks. I was hunting around /etc/ trying to find where that warning comes from and what parses forBASH_SILENCE_DEPRECATION_WARNING and as you show, that message is hardcoded into MacOS's /bin/bash
    – Dave X
    Jul 28 at 17:38
  • Another way to avoid the warning baked into/bin/bash is to chsh to any non-self-deprecating shell such as those listed in /etc/shells
    – Dave X
    Jul 28 at 17:50
  • 1
    @DaveX Yes but then you are not in bash - so a different question - If you want to keep in bash install a new version as in apple.stackexchange.com/a/400546/237
    – mmmmmm
    Jul 28 at 18:01
  • Ah, if you install a new bash and list it in /etc/shells then users can switch themselves to the new bash with chsh, if not, the superuser needs to override their shell.
    – Dave X
    Jul 28 at 20:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .