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

如何在执行的Ruby脚本失败时中途退出Bash脚本?

解决Bash脚本执行Ruby脚本时中途退出的问题

核心实现:让Bash在Ruby脚本失败时立即退出

Bash默认会忽略命令的退出状态继续执行后续命令,要实现中途退出,有两种常用方式:

方式1:在脚本开头设置set -e

直接在Bash脚本顶部添加set -e,它会让脚本在任一命令以非零状态退出时立即终止执行。修改后的脚本如下:

#!/bin/bash
set -e

ruby script_1.rb
ruby script_2.rb
ruby script_3.rb

只要某个Ruby脚本以exit 1退出,Bash脚本就会立刻停止,不再执行后续的Ruby脚本。

方式2:手动检查每个Ruby脚本的退出状态

如果需要更精细的控制(比如失败时输出自定义提示),可以手动捕获每个命令的退出状态。Bash里可以用$?获取上一个命令的退出码,示例:

#!/bin/bash

ruby script_1.rb
if [ $? -ne 0 ]; then
    echo "script_1.rb执行失败"
    exit 1
fi

ruby script_2.rb
if [ $? -ne 0 ]; then
    echo "script_2.rb执行失败"
    exit 1
fi

ruby script_3.rb
if [ $? -ne 0 ]; then
    echo "script_3.rb执行失败"
    exit 1
fi

这种方式能针对每个脚本的失败做单独处理,再决定是否退出。

关于Ruby脚本的退出状态捕获

不需要Ruby脚本额外抛出异常,只要Ruby脚本在失败时执行exit 1(或者任何非零值),Bash就能通过$?捕获到它的退出状态。

比如Ruby脚本里这样写,就能让Bash识别到失败:

# script_1.rb示例
begin
  # 业务逻辑
  result = some_operation
  if result.nil?
    exit 1 # 执行失败时退出,返回非零码
  end
rescue StandardError => e
  exit 1 # 捕获异常后也可以返回非零码退出
end

不管是主动调用exit 1,还是未捕获的异常导致Ruby进程崩溃(此时Ruby默认也会返回非零退出码),Bash都能感知到并触发后续的退出逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:35:12