Genesis
Often when a shell command line start to become a little long, I like to break it down into functions.
But things start to get complicated when it involve a remote host.
It usually involve spawning a remote shell with ssh and then double escaping lot of characters (ssh and remote shell) in order to properly execute commands.
Another solution exist though and it's usage it really simple, just write your commands in a function and pass it's name to a magic wrapper that will on remote host re-export it.
How
Has show in this excellent video, bash
has a declare
builtin that can re-export local function into string (automatically taking care of escaping).
Thus one can pass these generated string to ssh
, so functions are re-exported on remote hosts.
Also bash
support nested function, you can create and export namespaces this way:
func="namespace"
Why
bash and ssh are ubiquitous and existed for a long time. Plus the shell will allow you to run virtually anything on the remote system.
Where
You can find an helper function here: shell_utils, you need to copy the function into your ~/.bash_aliases
.
It export ssh_exec_func
:
More
Stay tuned for a post that'll push this concept further.