我需要通过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/

10-09 08:33