0

我正在尝试远程调用在不同服务器上的 shell 脚本中定义的函数,并让该函数在远程服务器上运行。

希望下面的例子能说明这一点。

在 host2 我有两个脚本。

实用程序.sh:

f ()
{
  hostname
}

测试.sh:

. utils.sh
f

在 host2 上,我可以执行以下操作:

host2:/tmp# ./test.sh
 host2

从 host1,我希望能够调用该函数f并让它在 host2 上运行(所以在这个例子中,它会打印“host2”,因为f只是调用hostname)。但是,实际上我收到以下错误:

host1:~# ssh root@host2 /tmp/test.sh
 /tmp/test.sh: line 1: utils.sh: No such file or directory
 /tmp/test.sh: line 2: f: command not found

因此,很明显 test.sh 实际上是在 host1 上运行 - 这就是为什么它找不到 /tmp/utils.sh (因为它只在 host2 上)以及相应的为什么 if can't run function f

是否可以在远程 shell 脚本中调用函数,并让它在远程机器上运行?或者我还能做些什么来实现类似的目标?

谢谢 :-)

4

1 回答 1

1

啊,我的脚本中有一个错误。

test.sh 应该是

. /tmp/utils.sh
f

我错过了 utils.sh 脚本的完整路径。

- 编辑添加:-

值得注意的是,没有必要在新脚本中包含 & 函数调用中的点 - 也可以像这样直接调用:

host1:~# ssh root@host2 ". /tmp/utils.sh; f"
 host2
于 2013-09-09T19:17:42.777 回答