You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SSH获取远程服务器命令执行结果供本地使用

问题根因

你写的脚本存在两个核心问题导致结果无法被本地调用:

  • 仅将SSH远程执行的结果直接打印到终端,没有做输出捕获,本地环境的后续逻辑拿不到这个值
  • SSH传递的远程命令末尾多了一个冗余的右括号,存在语法瑕疵;同时原grep匹配正则未转义特殊字符、版本连接符写错,存在匹配不准的隐患
修复方案

通过shell的命令替换语法将SSH的远程执行结果直接赋值给本地变量,后续本地逻辑直接调用该变量即可,完整可运行脚本如下:

#!/bin/bash
set -euxo pipefail

# 将远程命令输出捕获到本地变量REMOTE_VERSION
REMOTE_VERSION=$(ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PreferredAuthentications=publickey user@server.com "cd /myDir && ls file-*.tar.xz | sort -V | tail -n1 | grep -o '[[:digit:]]\+\.[[:digit:]]\+-[[:digit:]]\+'")

# 本地后续逻辑可直接调用$REMOTE_VERSION,以下为验证示例
echo "获取到的远程最新文件版本号:$REMOTE_VERSION"
关键说明
  • $(ssh ...) 是shell原生的命令替换语法,会把括号内命令的所有标准输出内容捕获,作为字符串赋值给左侧变量,不会丢失执行结果
  • 修正了原正则的问题:原正则中.未转义会匹配任意字符,且版本段之间的连接符是-不是.,调整后的正则可以精准匹配x.y-z格式的版本号,不会出现误匹配
  • 用&&连接目录切换和后续查找命令,当/myDir目录不存在、切换失败时会直接终止执行,符合set -e的错误退出规则,避免在错误目录下执行查找
  • 删除了原命令末尾多余的右括号,修复语法错误
脚本外部调用变量的方法

如果需要在脚本执行结束后,在当前服务器的其他流程里拿到这个版本号,可根据场景选对应方式:

  • 若需要在当前shell会话直接使用变量,用source方式执行脚本:source 你的脚本文件名.sh,执行完成后当前会话可直接读取$REMOTE_VERSION的值
  • 若以子进程方式正常执行脚本,可让脚本最终通过echo输出版本号,外部调用时同样用命令替换捕获即可:FINAL_VERSION=$(bash 你的脚本文件名.sh)

内容的提问来源于stack exchange,提问作者fr0zt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 22:06:18