我正在尝试远程调用另一台服务器上的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脚本中调用函数,并让它在远程计算机上运行?或者我还能做些什么来实现类似的目标?
谢谢: - )
答案 0 :(得分:1)
啊,我的剧本中有一个错误。
test.sh应该是
. /tmp/utils.sh
f
我错过了utils.sh脚本的完整路径。
- 编辑添加: -
值得注意的是,没有必要将点缀包装在&函数调用新脚本 - 也可以像这样直接调用:
host1:~# ssh root@host2 ". /tmp/utils.sh; f"
host2