67

In ~/.bash_profile I have :

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

In ~/.bashrc I have some aliases

When I load a new iTerm window, my aliases do not work. If I source ~/.bashrc they work. If I source ~.bash_profile they work.

Isn't at least one of these supposed to be sourced automatically?

What might be causing it not to work properly?

Damon
  • 2,739
  • 6
  • 24
  • 28

3 Answers3

83

The answer is simple, almost evident in the question. Here's why:

The shell zsh is not bash, it is a different shell. zsh will not use the default files built for bash: .bashrc or .bash_profile. These two files are startup configuration files for bash. zsh has its own startup configuration files.

You can find out more about them here on the zsh intro page:

There are five startup files that zsh will read commands from:

$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout

You had mentioned your aliases don't work, to fix this, apply your aliases here like so:

~/.zshrc

alias sz='source ~/.zshrc'     # Easily source your ~/.zshrc file.
alias ls='pwd; ls --color'     # Alias 'ls' to: pwd + ls + color.
39

If you are using zsh then to force source .bash_profile

in ~/.zshrc add the line below

source ~/.bash_profile

P.S - I havent investigated whether this can cause any problem.

Alok Swain
  • 491
  • 4
  • 5
  • 3
    I guess this answer would be helpful after release of macOS 10.5 Catalina in order to port bash_profile from bash to zsh. – Oleksii Kyslytsyn Sep 29 '19 at 12:23
  • 1
    Fast and effective! – Roberto Manfreda Oct 14 '19 at 12:34
  • 1
    Note this is very bad idea if your `.bash_profile` calls `source .bashrc`. Then you'll have a zsh shell loading a bunch of bash code and probably do weird behavior. – cgnorthcutt Feb 19 '20 at 23:33
  • 1
    @cgnorthcutt Why is loading bash code a problem? If it's just setting up some simple aliases, for example. – James Koss Mar 05 '20 at 15:18
  • 3
    @JamesKoss Say the next day you install a program that modifies your .bashrc to loop over a bunch of other aliases to add. Oops... zsh and bash use different looping indices, and now your .zshrc is broken. – cgnorthcutt Mar 05 '20 at 20:49
3

Copy the lines from ~/.bash_profile to ~/.zshrc

cat ~/.bash_profile >> ~/.zshrc

And open a new terminal tab/window or use source ~/.zshrc

  • 1
    This deleted all my ~/.zshrc previous contents. – Gerard Reches Mar 28 '20 at 22:21
  • 5
    @GerardReches Sorry for the mess. In my case, I didn't have `~/.zshrc` so `>` will create and add the lines from `~/.bash_profile`. you should have used `>>` update operator to append `~/.zshrc. – I Don't Exist Mar 30 '20 at 07:14