如何为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仓库生效):
原理其实很简单:Git在执行需要shell解释的命令时,优先级是SHELL环境变量 > Git的core.shell配置 > 系统默认的/bin/sh。所以通过上面两种方式,就能直接让submodule foreach用bash执行你的代码,完全不用嵌套引号绕圈子。
内容的提问来源于stack exchange,提问作者SamTheEagle
相关产品推荐
相关产品推荐

