我在这里的另一个问题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地址,而且我需要在本地脚本上知道这一功能。
答案 0 :(得分:2)
通常不可能(忽略调试器技巧)在正在运行的进程的地址空间中找出变量的值,而该进程不会明确地共享它。它可以将值写入磁盘,您可以从另一个进程读取该文件(在本地运行,或通过ssh
)。
答案 1 :(得分:0)
你的第二个例子local_var=$(ssh user@server "echo \${server_var}")
对我有用。当你像这样调用ssh时,你确定你要读取的变量是否已设置?请记住,当您将命令传递给ssh
时,它会创建一个非交互式shell,从而导致不同的shell初始化(并且通常设置的变量通常较少)。