是否可以在远程shell脚本中调用函数?

时间:2013-09-09 19:05:05

标签: linux shell remote-access

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

希望以下示例能够明确这一点。

在host2上我有两个脚本。

utils.sh:

f ()
{
  hostname
}

test.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上)而且相应地为什么如果不能运行函数{{1 }}

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

谢谢: - )

1 个答案:

答案 0 :(得分:1)

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

test.sh应该是

. /tmp/utils.sh
f

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

- 编辑添加: -

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

host1:~# ssh root@host2 ". /tmp/utils.sh; f"
 host2