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
打印函数的定义