Is there any clever way to run a local Bash function on a remote host over ssh?
For example:
#!/bin/bash
#Definition of the function
f () { ls -l; }
#I want to use the function locally
f
#Execution of the function on the remote machine.
ssh user@host f
#Reuse of the same function on another machine.
ssh user@host2 f
Yeah, I know it doesn't work, but is there a way to achieve this?
Another way:
declare -f foo
print the definition of functionI personally don't know the correct answer to your question, but I have a lot of installation scripts that just copy themselves over using ssh.
Have the command copy the file over, load the file functions, run the file functions, and then delete the file.
You can use the
typeset
command to make your functions available on a remote machine viassh
. There are several options depending on how you want to run your remote script.To use the function on the remote hosts:
Better yet, why bother with pipe:
Or you can use a HEREDOC:
If you want to send all the functions defined within the script, not just
myfn
, just usetypeset -f
like so:Explanation
typeset -f myfn
will display the definition ofmyfn
.cat
will receive the definition of the function as a text and$()
will execute it in the current shell which will become a defined function in the remote shell. Finally the function can be executed.The last code will put the definition of the functions inline before ssh execution.