为“gitsubmoduleforeach”设置不同的shell
看起来 Git/bin/sh在通过git submodule foreach '...'. 有什么方法可以改变这一点,例如说服 git 使用bin/bash?
我不是在寻找明显的解决方案,即只封闭脚本片段注入额外的bash -c '...',因为在快速报价地狱结束了,因为这两个git submodule foreach和bash -c应具备的脚本剪断传递给他们封闭在单引号。
回答
如果我正确阅读代码,sh则在 git 的源代码中进行了硬编码:
git submodule foreach最终run_command()从run-command.c文件中调用,在按摩其参数时会在此处通过此指令:
if (strcspn(argv[0], "|&;<>()$`"' tn*?[#~=%") != strlen(argv[0])) {
#ifndef GIT_WINDOWS_NATIVE
strvec_push(out, SHELL_PATH);
#else
strvec_push(out, "sh"); // <- this instruction
#endif
strvec_push(out, "-c");
...
(从版本引用代码2.29.0)
由于使用另一个 shell 就像在脚本文件中编写您的操作并使用所述 shell 运行它一样简单(使用#!/bin/zsh一行或zsh myscript.sh调用),因此如果您需要使用另一个 shell 运行您的操作,我建议您采用这种方法。