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

如何在Bash脚本execute.sh中通过SSH捕获远程脚本onvps.sh的退出码

解决远程SSH脚本执行的退出码捕获问题

嘿,你遇到的这个问题其实有个很直接的解决方案——SSH本身会将远程执行命令的退出码返回给本地终端,关键是要确保远程的bash -s进程正确传递onvps.sh的退出状态。

核心原理

当你通过ssh user@host 'bash -s' < local_script.sh执行脚本时:

  1. 远程主机启动bash -s进程,读取并执行从标准输入传来的脚本内容
  2. bash -s进程的退出码会和onvps.sh的退出码保持一致(除非脚本中有特殊的错误处理逻辑覆盖了退出状态)
  3. SSH客户端会将远程进程的退出码作为自己的退出码返回给本地

具体实现方式

你只需要在执行SSH命令后,直接捕获本地的$?变量即可拿到远程脚本的退出码:

# 执行远程脚本
ssh "$REMOTE_USER@$REMOTE_HOST" 'bash -s' < ./onvps.sh

# 捕获并使用远程脚本的退出码
remote_exit=$?

if [ $remote_exit -eq 0 ]; then
    echo "远程脚本执行成功!"
else
    echo "远程脚本执行失败,退出码: $remote_exit"
    # 这里可以根据退出码做后续处理,比如终止本地脚本或执行其他逻辑
    exit $remote_exit
fi

特殊情况处理

如果你的onvps.sh中有子shell或者复杂的命令链,可能需要确保脚本的最终退出码是你期望的值:

  • 在onvps.sh的末尾明确添加exit $?,保证脚本的退出码等于最后一个命令的执行状态
  • 如果脚本中使用了set -e(遇到错误立即退出),确保不会因为中间命令的错误被意外忽略

比如修改onvps.sh的结尾:

# 你的脚本逻辑...

# 确保脚本返回最后一个命令的退出码
exit $?

这样就能保证远程的bash -s进程返回的是脚本实际的退出状态,进而被本地的SSH命令传递回来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:23:17