I have defined three aliases in my .bash_profile
but my bash shell is not reading it. The aliases defined are not working in my terminal and I couldn\'t resolve
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.
Open the Preferences of the Terminal. You specify the command you start your shell with:
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
--wordexp
Shell 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.
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.
Assuming:
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.Terminal > Preferences...
, tab General
, setting Shells open with
tells you whether the default shell or a custom shell is being used.