If you’re like me, your aliases have no spaces in them. They are all single-worded like these:
alias gs="git status"
alias gd="git diff "
A few days ago I started learning Elixir and Phoenix and realised Phoenix has commands like iex -S mix
and mix phx.server
. Coming from Ruby on Rails, I guess I’m too used to rails c
and rails s
so I sought to figure out how to get multi-worded aliases.
Shell Functions as Aliases
If you think about it, your .bashrc
and .zshrc
files are just Bash scripts. I never thought of it this way, and until today I didn’t know that you can define functions in them to use as aliases.
For almost every purpose, shell functions are preferred over aliases. ~Bash Manual
With the new-found knowledge, this is how I set up alias equivalents of the more verbose iex -S mix
and mix phx.server
commands.
phx() {
if [[ $@ == "c" || $@ == "console" ]]; then
command iex -S mix
elif [[ $@ == "s" || $@ == "server" ]]; then
command mix phx.server
elif [[ $@ == "r" || $@ == "routes" ]]; then
command mix phx.routes
fi
}
Bash Alias With Spaces
With this, you can just run phx c
or phx console
to load IEx
preloaded with your Phoenix app. Or phx s
and phx server
to start your Phoenix server; with c
, console
, s
, server
being parameters to the phx()
function.
PS: You can run source /path/to/.*rc
to immediately use your commands without restarting your shell, where *rc
would be your “run commands” file (.bashrc
, .zshrc
or whatever).
This is shorter and faster to type and remember.