1

我有两个正在运行的脚本。一个从客户端工作站运行并调用服务器上的脚本。我需要来自服务器脚本的变量,我想我可以这样做,但它不起作用:

#!/bin/sh

local_var=""

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

echo "$local_var"

我的 local_var 输出为空。有没有办法做到这一点?

4

3 回答 3

3

尝试:

local_var=$(ssh user@server "echo ${server_var}")
于 2013-05-16T13:43:57.323 回答
2

是的,您需要打印变量名称和值,然后获取其输出。一个例子:

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

这适用于 bash,它可能不适用于不支持将命令输出重定向到source. 对于这些 shell,您可能需要先创建一个临时文件。

于 2013-05-16T13:42:15.073 回答
1

我要做3个假设:

  1. 远程机器是一个 Linux 机器。
  2. 您知道远程脚本实例的进程 ID。
  3. 您想要的变量在远程进程的环境中。

假设上述情况,以下应该有效:

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 )
于 2013-05-16T13:43:50.347 回答