【问题标题】:Assign variable from SSH server to local machine variable将变量从 SSH 服务器分配给本地机器变量
【发布时间】:2023-03-27 05:06:02
【问题描述】:

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

#!/bin/sh

local_var=""

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

echo "$local_var"

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

【问题讨论】:

    标签: linux shell unix ssh


    【解决方案1】:

    试试:

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

    【讨论】:

    • 我还在测试这个,但我认为这可能是解决方案
    • 我没有运气。我尝试完全按照您的方式输入它,但我的变量仍然为空。我还尝试添加这样的空格: local_var=$( ssh user@server "echo ${server_var}" )
    • 您确定在远程系统上设置了server_var
    • 是的先生,它在整个服务器脚本中大量使用(有效)
    【解决方案2】:

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

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

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

    【讨论】:

    • 在这方面出现错误...“意外标记 `(' ..."附近的语法错误”
    【解决方案3】:

    我将做出 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 )
    

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多