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

如何为git submodule foreach指定不同的Shell解释器?

解决Git Submodule Foreach默认使用/bin/sh的问题

完全有办法不用嵌套bash -c这种麻烦的写法来切换到/bin/bash,下面给你两个实用方案:

  • 临时生效(单次命令):在执行git submodule foreach前直接指定SHELL环境变量,这样本次命令就会用bash来解释你的代码片段:

    SHELL=/bin/bash git submodule foreach '你的bash专属代码,比如用数组、高级字符串操作都没问题'
    

    这个方法的好处是只影响当前这一条命令,不会改变全局或仓库的默认设置,适合临时需要bash特性的场景。

  • 永久生效(全局/仓库级):如果你希望所有git submodule foreach命令默认都用bash,可以修改Git的配置项:

    • 全局配置(对所有Git仓库生效):
      git config --global core.shell /bin/bash
      
    • 仓库级配置(仅对当前仓库生效):
      git config core.shell /bin/bash
      

    之后所有需要调用shell的Git操作(包括submodule foreach)都会默认使用bash。不过要注意,这个设置会影响所有依赖shell的Git行为,如果你的其他脚本依赖POSIX sh的特性,可能需要权衡一下。

原理其实很简单:Git在执行需要shell解释的命令时,优先级是SHELL环境变量 > Git的core.shell配置 > 系统默认的/bin/sh。所以通过上面两种方式,就能直接让submodule foreach用bash执行你的代码,完全不用嵌套引号绕圈子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:28:53