Assign variable from SSH server to local machine v

2019-08-12 02:56发布

问题:

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?

回答1:

Try:

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


回答2:

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.



回答3:

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 )