将变量从SSH服务器分配给本地机器变量

时间:2013-05-16 13:31:59

标签: linux shell unix ssh

我有两个正在运行的脚本。一个从客户端工作站运行并调用服务器上的脚本。我需要一个来自服务器脚本的变量,我想我可以这样做,但它不起作用:

#!/bin/sh

local_var=""

ssh user@server " $local_var=\$server_var "

echo "$local_var"

我对local_var的输出为null。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

尝试:

local_var=$(ssh user@server "echo ${server_var}")

答案 1 :(得分:2)

是的,您需要打印变量名称和值,然后获取其输出。一个例子:

$ source <(ssh user@server 'echo foo=\"$bar\"')
$ echo $foo
bar

这适用于bash,它可能不适用于不支持将命令输出重定向到source的shell。对于这些shell,您可能需要先创建一个临时文件。

答案 2 :(得分:1)

我将做出3个假设:

  1. 远程计算机是一个Linux机器。
  2. 您知道远程脚本实例的进程ID。
  3. 您想要的变量位于远程进程的环境中。
  4. 假设上述情况,以下内容应该有效:

    local_var=$( ssh user@server bash -c '
       while IFS="=" read -d '' -r name value; do
         [[ $name = "server_var" ]] && echo $server_var && break
       done' < /proc/$REMOTE_SCRIPT_PROC_ID/environ )