如何在ssh服务器上将局部变量设置为变量值

时间:2013-06-06 18:26:44

标签: linux shell unix

我在这里的另一个问题Assign variable from SSH server to local machine variable从未成功回答,我不知道如何“碰撞”问题以获得更多视图,但我怎样才能将我的局部变量的值设置为值ssh服务器上的变量?

#!/bin/sh

ssh_cmd="ssh-t -o StrictHostKeyChecking=no -o ControlPath=~/.ssh/master-$$ -o ControlMaster=auto -o ControlPersist=10"

local_var=""

$ssh_cmd user@server " server_var=\"test\" "

local_var=$($ssh_cmd user@server 'echo $server_var')

echo $local_var

这将导致null。

修改

我正在使用ssh连接共享,我认为整个会话(连接都是共享的),因此我建立了一个初始连接并设置变量,并重新连接到该会话以回显出该变量组。

我在ssh服务器上有一个程序,用于检索虚拟机的IP地址。我的本地脚本需要这个地址,以便我从本地脚本对虚拟机运行一些东西。

ssh服务器不仅仅是获取IP地址,而且我需要在本地脚本上知道这一功能。

2 个答案:

答案 0 :(得分:2)

通常不可能(忽略调试器技巧)在正在运行的进程的地址空间中找出变量的值,而该进程不会明确地共享它。它可以将值写入磁盘,您可以从另一个进程读取该文件(在本地运行,或通过ssh)。

答案 1 :(得分:0)

你的第二个例子local_var=$(ssh user@server "echo \${server_var}")对我有用。当你像这样调用ssh时,你确定你要读取的变量是否已设置?请记住,当您将命令传递给ssh时,它会创建一个非交互式shell,从而导致不同的shell初始化(并且通常设置的变量通常较少)。