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

Bash脚本执行参数展开时触发段错误的问题排查求助

Bash 5.2.37 在 macOS 15.3.1 下执行 ${BASH_SOURCE%/*} 触发段错误

环境信息

  • macOS 15.3.1 (aarch64)
  • 默认Shell:Zsh 5.9(搭配Oh-my-zsh)
  • 使用的Bash版本:Homebrew安装的5.2.37(1)-release(路径:/Users/my.name/.homebrew/bin/bash),系统自带Bash路径为/bin/bash

问题描述

通过Homebrew安装的pyenv执行任何操作都会触发段错误,排查后定位到Shell参数展开步骤,编写最小复现脚本后发现,执行${BASH_SOURCE%/*}这一行时会直接崩溃。

复现脚本

#!/usr/bin/env bash
set -e
set -x

echo "ONE 1"
echo "SOURCE: ${BASH_SOURCE}"
echo "${BASH_SOURCE%/*}"
echo "FROB"

执行输出

--> ./silly.sh
+ echo 'ONE 1'
ONE 1
+ echo 'SOURCE: ./silly.sh'
SOURCE: ./silly.sh
[1]    49693 segmentation fault  ./silly.sh

补充调试信息

在脚本中添加typeset -p BASH_SOURCE、type -a bash和bash --version后,输出如下:

--> ./silly.sh
+ echo 'ONE 1'
ONE 1
+ echo 'SOURCE: ./silly.sh'
SOURCE: ./silly.sh
+ typeset -p BASH_SOURCE
declare -a BASH_SOURCE=([0]="./silly.sh")
+ type -a bash
bash is /Users/my.name/.homebrew/bin/bash
bash is /bin/bash
+ bash --version
GNU bash, version 5.2.37(1)-release (aarch64-apple-darwin24.3.0)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[1]    59817 segmentation fault  ./silly.sh

可能的原因及验证方向

  1. Homebrew编译的Bash与aarch64 macOS兼容性bug
    该问题大概率是Homebrew编译的Bash 5.2.37在Apple Silicon架构的macOS 15上存在底层bug,具体是对数组变量BASH_SOURCE进行参数展开时的内存访问错误。可以尝试:

    • 使用系统自带的Bash(/bin/bash,版本3.2)运行脚本,确认是否崩溃;
    • 重新安装Homebrew的Bash,或升级到最新可用版本;
    • 尝试在脚本中显式指定数组索引:将${BASH_SOURCE%/*}改为${BASH_SOURCE[0]%/*},看是否能避免崩溃。
  2. Shell环境变量冲突
    虽然默认Shell是Zsh,但执行Bash脚本时可能继承了Zsh或Oh-my-zsh的某些环境变量,干扰了Bash的正常运行。可以尝试在干净环境下运行脚本:

    env -i ./silly.sh
    

    若崩溃消失,则说明是环境变量导致的冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:37:44