Shell脚本:通过ssh脚本运行函数

有没有什么聪明的方法通过ssh在远程主机上运行本地Bash函数?

例如:

#!/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 

是的,我知道这是行不通的,但有没有办法做到这一点?

有一个简单的方法来完成它。

 #!/bin/bash #Definition of the function f () { ls -l; } 

要使用远程主机中的function

 typeset -f | ssh user@host "$(cat);f" 

在另一台远程机器上使用:

 typeset -f | ssh user@host2 "$(cat);f" 

更好的是,为什么打扰pipe道

 ssh user@host "$(typeset -f); f" 

说明。

排版-f将显示脚本中定义的function。

cat将以函数forms接收函数的定义, $()将在当前shell中执行它,这将成为远程shell中定义的函数。 最后可以执行该function。

最后一段代码将在ssh执行之前内联函数的定义。

我个人不知道你的问题的正确答案,但我有很多安装脚本,只是使用SSH复制自己。

有命令复制文件,加载文件function,运行文件function,然后删除文件。

 ssh user@host "scp user@otherhost:/myFile ; . myFile ; f ; rm Myfile" 

其他方式:

 #!/bin/bash # Definition of the function foo () { ls -l; } # Use the function locally foo # Execution of the function on the remote machine. ssh user@host "$(declare -f foo);foo" 

declare -f foo打印函数的定义