我需要通过ssh
在大量主机上调用一些代码。
我试图使用所谓的heredocs
。
function verifyFiles {
...
}
...
ssh user@$server <<-SSH
cd $DIRECTORY
verifyFiles
createSum
copyFiles
SSH
ssh user@server2 <<-SSH
cd $DIRECTORY
verifyFiles
verifySums
SSH
...
不幸的是,服务器端尚不知道以这种方式使用的功能。
是否有一种优雅的方式来使用这些功能,而无需将其粘贴到每个
heredoc
中?PS。每个主机上的代码调用略有不同,但是使用相同的功能集。我真的很想在代码中每个方法定义有1个副本。
PS2。当然,如果有更好的方法来调用此代码,则不必使用
heredocs
。 最佳答案
如果您有一个本地函数fooX
可以在每个hostX
上远程执行,则可以通过相应主机上的ssh
定义并执行它,如下所示:
#!/bin/bash
function foo1() {
echo foo
}
function foo2() {
echo f0o
}
function remotefn() {
# echo the function definition:
type "$1" | tail -n +2
# echo the function call:
echo "$1"
}
while read user host fn
do
# remotely execute function definition and the function itself:
remotefn "$fn" | ssh "$user"@"$host"
done <<END
user1 host1 foo1
user2 host2 foo2
END
请注意,循环后的Heredoc如何将功能灵活地映射到用户和主机。
ssh
将读取并执行各自主机上remotefn
提供的每个函数定义和函数调用。关于bash - 将方法传递给heredocs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31963370/