如何使用继承shell变量的脚本扩展Git(Windows)?

时间:2018-07-19 22:12:20

标签: bash git shell perl

我是一名运行Windows v2.12.2(2)的Git并使用其随附的GitBash程序来满足我的所有shell需求的开发人员。此外壳程序中可用的bash版本似乎是v4.4.12(1)。我在Windows 10上。

我有一个Perl脚本,我希望Git在运行命令git my-script时能够执行。我确保脚本在我的PATH上,并且能够运行git my-script并看到我的脚本正在运行。但是,我的脚本需要位于文件系统上几个位置的自定义模块,并且在通过git my-script运行时找不到。我知道我的所有shell变量都已正确配置;如果我直接运行脚本(即perl /path/to/git-my-script),则该脚本可以正常运行。

出于这个问题的目的,请使用以下非常简单的脚本:

#!/usr/bin/env perl

# Print all directories searched for perl modules
print "$_\n" for @INC;

通过perl /path/to/my-script运行时,它将按预期输出所有目录。通过git my-script运行时,它为我的PERL5LIB变量中定义的目录(需要的目录)输出相同的目录除了

git my-script正在调用什么外壳程序而不继承我的PERL5LIB变量?这是Windows特定的问题吗?还有其他需要调整的配置文件,还是必须定义的系统变量?

编辑:我怀疑git调用了/bin/sh,这一直在抱怨__git_ps1不是一个已定义的函数。当我将其定义为__git_ps1 () { return; }时,PERL5LIB变量突然变为可用。

1 个答案:

答案 0 :(得分:0)

  

git my-script正在调用什么外壳程序而不继承我的PERL5LIB变量?

因为Git有自己的Perl。

在Git 2.20(2018年第四季度)中更明确地表明了这一点:

请参见commit 0e218f9commit bdfbb0ecommit 70fc579commit 409670fJohannes Schindelin (dscho)(2018年10月30日)。
(由Junio C Hamano -- gitster --commit 6c268fd中合并,2018年11月13日)

  

mingw:默认未设置PERL5LIB

     

Windows版Git附带了自己的Perl解释器,并坚持使用它,因此,如果在启动Git之前设置了PERL5LIB,它很可能造成严重破坏。

     

让我们在生成进程时取消设置环境变量。

     

为使此功能具有可扩展性(可重写性),有一个新的配置设置core.unsetenvvars允许您指定一个用逗号分隔的名称列表,以在生成程序之前取消设置。

     

Gabriel Fuhrmann报道。

根据您的情况,您可以将core.unsetenvvar设置为“空”,以取消设置PERL5LIB,但是还必须调整{{1 }}到GITPERLLIB以及您自己的文件夹。