.bashrc loading aliases from different file
I have a .bashrc file, which I want to setup so it reads aliases from an .aliases file and sets them up.
Currently I have:
# User specific aliases and functions
while read alias_line
do
echo `alias ${alias_line}`
done < .aliases
But upon login I get:
-bash: alias: -fu: not found -bash: alias: $USER": not found
-bash: alias: -lart": not found
The .aliases file is like this:
psu="ps -fu $USER" ll="ls -lart"
pico='nano'
When you use alias ${alias_line}
, the variable is broken up at spaces, ignoring quoting rules.
There are two ways you could fix it:
-
Remove all quoting from the alias file:
ll=ls -lart psu=ps -fu $USER
and put the variable itself in quotes:
alias "$alias_line"
This works because in bash,
ll="ls -lart"
and"ll=ls -lart"
are exactly equivalent. -
Alternatively (this is a better and more common way), have a file with
alias
commands, and use the.
builtin (akasource
) to import it.alias pico='nano' alias psu='ps x' alias ll='ls -lart'
then in your
~/.bashrc
:. ~/.aliases
The second method is better, since it does not limit you to aliases, but also allows defining functions, which are much more powerful.