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.