2013-05-16 69 views
1

我有两个正在运行的脚本。一个从客户端工作站运行并在服务器上调用脚本。我需要从服务器脚本变量,我想我可以做这种方式,但它不工作:从SSH服务器分配变量到本地机器变量

#!/bin/sh 

local_var="" 

ssh [email protected] " $local_var=\$server_var " 

echo "$local_var" 

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

回答

3

尝试:

local_var=$(ssh [email protected] "echo ${server_var}") 
+0

我'我仍然测试这个,但我认为这可能是解决方案 –

+0

我没有这个运气,我试着按照你的方式打字,但我的变量仍然是空的,我也尝试添加这样的空间:local_var = $(ssh user @ server“echo $ {server_var}”) –

+0

你确定在远程系统上设置了server_var吗? – devnull

2

是的,您需要打印变量名称和值,然后源输出。举个例子:

$ source <(ssh [email protected] 'echo foo=\"$bar\"') 
$ echo $foo 
bar 

这部作品庆典,它可能无法在不支持命令输出重定向到source弹工作。对于这些shell,您可能需要先创建一个临时文件。

+0

'源<(...)'是EVAL的'替代...'?有趣...... – anishsane

+0

在这个上得到一个错误......“意外的令牌附近的语法错误'('...' –

+1

看起来你的本地系统不支持'<(...)'语法... – anishsane

1

我打算让3个假设:

  1. 远程机器是一台Linux机器。
  2. 您知道远程脚本实例的进程ID。
  3. 你想要的变量是在远程进程的环境中。

假设以上,以下应工作:

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