【问题标题】:Source a script remotly via ssh通过 ssh 远程获取脚本
【发布时间】:2014-09-18 16:30:45
【问题描述】:

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

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

我收到一个错误,表明该脚本的来源不正确。您知道我必须做什么才能在同一会话中获取脚本来源和执行程序吗?

编辑: 我正在使用脚本导出 LD_LIBRARY_PATH 并且可执行文件抱怨它找不到共享对象文件。默认外壳是 bash。 “会话”是明确的,不是正确的措辞。我的意思是“终端环境”。

【问题讨论】:

  • "我收到一个错误,表明脚本的来源不正确。" 你需要比这更具体。请更新您的问题以显示 exact 错误消息(复制并粘贴它)。我刚刚尝试了一个类似的示例,并且成功了。
  • 我编辑了上面的问题。 @KeithThompson:很高兴知道它原则上必须有效。我一直在努力……
  • 您已描述错误消息。将确切的错误消息复制并粘贴到您的问题中会更有帮助。
  • 执行程序时的错误就是error while loading shared libraries: libCloudConnector.so.1: cannot open shared object file: No such file or directory source 本身不会产生错误。
  • 为了清楚起见,当您直接登录时,我假设它是同一用户 (user),而您在这种情况下键入的命令是 source ~/script.sh; ~/run/program,这有效吗?

标签: bash ssh


【解决方案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

祝你好运。

【讨论】:

    【解决方案2】:

    感谢您的所有时间和帮助。我发现了这个问题。如何执行远程程序的基本思想从一开始就是正确的。在机器上本地测试我的案例时,当前工作目录不同。出于某种原因,在采购此 bash 脚本时,cwd 很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 2012-05-11
      • 2017-08-02
      • 2021-02-13
      • 1970-01-01
      • 2011-10-08
      • 2018-03-26
      • 2014-08-29
      相关资源
      最近更新 更多