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?
Try:
local_var=$(ssh user@server "echo ${server_var}")
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.
I'm going to make 3 assumptions:
- The remote machine is a Linux box.
- You know the process ID of the remote script's instance.
- 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 )