Assign variable from SSH server to local machine v

2019-08-12 02:59发布

I have two scripts that are being run. One runs from a client workstation and calls a script on a server. I need a variable from the server script and I figured I could do it this way, but it isn't working:

#!/bin/sh

local_var=""

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

echo "$local_var"

My output of local_var is null. Is there a way to do this?

3条回答
Lonely孤独者°
2楼-- · 2019-08-12 03:33

Try:

local_var=$(ssh user@server "echo ${server_var}")
查看更多
聊天终结者
3楼-- · 2019-08-12 03:35

I'm going to make 3 assumptions:

  1. The remote machine is a Linux box.
  2. You know the process ID of the remote script's instance.
  3. The variable you want is in the remote process's environment.

Assuming the above, the following should work:

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 )
查看更多
时光不老,我们不散
4楼-- · 2019-08-12 03:37

yes, you need to print the variable names and values, then source the output of that. An example:

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

This works on bash, it may not work on shells which does not support redirecting command output to source. For those shells, you may need to create a temporary file first.

查看更多
登录 后发表回答