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

如何在Bash脚本中忽略Segmentation fault并执行后续命令

解决Bash脚本因程序段错误终止后续命令的问题

你的问题核心是set -e导致脚本在./cosim返回非零退出码时直接终止——程序发生段错误时,退出码通常是139(对应信号SIGSEGV,128+11),触发了set -e的终止逻辑,所以后续的echo命令无法执行。

以下是几种可行的解决办法:

方法1:忽略程序的退出码

在执行命令时添加|| true,强制让这条命令的返回值为0,这样set -e不会触发终止:

#!/bin/bash
set -e

time ./cosim || true
echo "After execution"

方法2:捕获并处理退出码

如果需要区分段错误和其他错误(比如正常的非零退出),可以先捕获退出码,再根据情况决定是否继续:

#!/bin/bash
set -e

time ./cosim
exit_code=$?

# 段错误的退出码是139,仅在这种情况继续执行后续命令
if [ $exit_code -eq 139 ]; then
    echo "程序发生段错误,继续执行后续步骤"
else
    # 其他错误仍按照set -e的逻辑终止脚本
    exit $exit_code
fi

echo "After execution"

方法3:临时关闭set -e

如果只是针对这一条命令关闭set -e的效果,可以用set +e和set -e包裹:

#!/bin/bash
set -e

# 临时关闭set -e
set +e
time ./cosim
exit_code=$?
# 恢复set -e
set -e

# 同样可以根据退出码处理
if [ $exit_code -eq 139 ]; then
    echo "程序段错误,继续执行"
else
    exit $exit_code
fi

echo "After execution"

补充说明

  • 程序发生段错误时的退出码:Bash中,进程因信号终止时,退出码为128 + 信号编号。SIGSEGV(段错误)的信号编号是11,所以退出码是139,这可以用来精准判断是否是段错误导致的退出。
  • set -e的作用:当脚本中任何命令返回非零退出码时,立即终止脚本执行,这也是你的后续命令无法运行的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:55:19