Alias defined in .bash_profile not working in OS X Alias defined in .bash_profile not working in OS X shell shell

Alias defined in .bash_profile not working in OS X


Assuming:

  • you use OS X's native terminal, Terminal.app, or popular alternative iTerm2
  • and bash is indeed your shell (as is the default on OS X)

then ~/.bash_profile should be loaded for every interactive shell, because both terminal programs create login shells by default.
Bash login shells source ~/.bash_profile, but not ~/.bashrc.

Note that this differs from most Linux distros, where a single login shell is executed on startup, and later interactive shells are non-login shells, which only load ~/.bashrc, not ~/.bash_profile.
A frequently seen technique to ensure that definitions are loaded in both login and non-login interactive shells is to place definitions in ~/.bashrc, and then source it from ~/.bash_profile, using the following line:
[[ -f ~/.bashrc ]] && . ~/.bashrc


You can create a login shell on demand by executing bash -l from an existing shell; if that loads your aliases, then the problem must be with what your default shell is and/or how your terminal program is configured.

  • echo $SHELL tells you what your default shell is.
  • if you use Terminal.app, Terminal > Preferences..., tab General, setting Shells open with tells you whether the default shell or a custom shell is being used.


We still don't know why aliases are not loaded automatically.

Your aliases should be loaded from the .bash_profile. This is the default behaviour of bash in OS X.

mklement0 wrote more about the problem in their answer in this thread.

A hacky workaround

Open the Preferences of the Terminal. You specify the command you start your shell with:

terminal preferences

Instead of manually sourcing your dotfiles every time you can specify which file you want to source when the shell opens. Here is the list of options for bash:

Usage:  bash [GNU long option] [option] ...    bash [GNU long option] [option] script-file ...GNU long options:    --debug    --debugger    --dump-po-strings    --dump-strings    --help    --init-file    --login    --noediting    --noprofile    --norc    --posix    --protected    --rcfile    --restricted    --verbose    --version    --wordexpShell options:    -irsD or -c command or -O shopt_option      (invocation only)    -abefhkmnptuvxBCHP or -o option

You might consider using /bin/bash --rcfile alias_file_of_yours or something similar.

Go for goat if you need aliases using the cd command.

As a side note I do recommend you to check out goat. It lets you manage such cd aliases easily.

I use it and I wrote it.