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'
Best Answer
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:
and put the variable itself in quotes:
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.then in your
~/.bashrc
:The second method is better, since it does not limit you to aliases, but also allows defining functions, which are much more powerful.