我想通过ssh运行一个需要特定环境的远程程序。因此,在执行程序之前,我获取构建环境的特定文件。如果我直接登录到机器,这不是问题,但是当我通过ssh执行命令时
#!/bin/bash
foo=`ssh user@host "source ~/script.sh; ~/run/program"`
我收到错误消息,表明脚本未正确获取。你知道我要做什么才能获得脚本来源和程序在同一个会话中执行吗?
编辑: 我正在使用脚本导出LD_LIBRARY_PATH,并且可执行文件抱怨它无法找到共享对象文件。默认的shell是bash。 '会话'是决定性的,而不是正确的措辞。我的意思是'终端环境'。
答案 0 :(得分:1)
这可能不是最干净的方法,但是如果使用交互式选项(-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
。
答案 1 :(得分:0)
感谢您的所有时间和帮助。我发现了这个问题。从一开始就是如何执行远程程序的基本思想。在机器上本地测试我的案例时,当前的工作目录是不同的。出于某种原因,在获取此bash脚本时,cwd非常重要。