为“gitsubmoduleforeach”设置不同的shell

看起来 Git/bin/sh在通过git submodule foreach '...'. 有什么方法可以改变这一点,例如说服 git 使用bin/bash

我不是在寻找明显的解决方案,即只封闭脚本片段注入额外的bash -c '...',因为在快速报价地狱结束了,因为这两个git submodule foreachbash -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 运行您的操作,我建议您采用这种方法。


以上是为“gitsubmoduleforeach”设置不同的shell的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>