nullByteMe
nullByteMe

Reputation: 6391

Assign variable from SSH server to local machine variable

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?

Upvotes: 1

Views: 1413

Answers (3)

Lie Ryan
Lie Ryan

Reputation: 64837

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.

Upvotes: 2

devnull
devnull

Reputation: 123458

Try:

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

Upvotes: 3

chepner
chepner

Reputation: 530960

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 )

Upvotes: 1

Related Questions