通过ssh远程获取脚本源代码

3

我希望通过ssh运行一个需要特定环境的远程程序。因此,在执行程序之前,我会先引用一个特定的文件来构建环境。如果我直接登录到机器上,这并不是问题,但当我通过ssh执行命令时

#!/bin/bash
foo=`ssh user@host "source ~/script.sh; ~/run/program"`

我遇到了一个错误,提示脚本没有被正确地引用。您知道我需要做什么才能在同一会话中获取脚本并执行程序吗?
编辑: 我正在使用脚本导出LD_LIBRARY_PATH,可执行文件报告找不到共享对象文件。默认的shell是bash。“Session”明显不是正确的措辞。我指的是“终端环境”。

2
“我收到了一个错误提示,表明脚本没有被正确地引用。” 你需要比这更具体的信息。请更新你的问题,展示“粘贴-复制”方式得到的确切错误信息。我刚刚尝试了一个类似的例子,它是可以工作的。 - Keith Thompson
1
我已编辑上面的问题。@KeithThompson:很高兴知道原则上它必须工作。我会继续尝试... - Timelimelim
1
你已经“描述”了错误信息。将精确的错误信息复制并粘贴到你的问题中会更有帮助。 - Keith Thompson
1
执行程序时出现的错误是error while loading shared libraries: libCloudConnector.so.1: cannot open shared object file: No such file or directory。源代码本身没有产生任何错误。 - Timelimelim
1
只是为了明确一点,当您直接登录时,我假设它是作为相同的用户(user),并且在那种情况下,您输入的命令是 source ~/script.sh; ~/run/program,这个命令能够正常工作吗? - lurker
显示剩余3条评论
2个回答

2
这可能不是最干净的方法,但如果您使用交互式选项(-i)调用bash并通过标准输入发送命令,则应该可以正常工作。
特别地,
foo=`ssh user@host bash -i <<EOF
source ~/script.sh
~/run/program
EOF`

如果您有一个名为program_in_env.sh的脚本,它可以完全执行您想要的两个步骤,那将会更加容易:

#!/bin/bash
source ~/script.sh
~/run/program

那么你只需要调用ssh user@host program_in_env.sh

祝好运。


0
感谢您的所有时间和帮助。我找到了问题所在。从一开始,执行远程程序的基本思路是正确的。当在机器上本地测试我的案例时,当前工作目录不同。由于某种原因,在调用此bash脚本时cwd很重要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接