我是一名运行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
变量突然变为可用。
答案 0 :(得分:0)
git my-script
正在调用什么外壳程序而不继承我的PERL5LIB
变量?
因为Git有自己的Perl。
在Git 2.20(2018年第四季度)中更明确地表明了这一点:
请参见commit 0e218f9的commit bdfbb0e,commit 70fc579,commit 409670f,Johannes 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
以及您自己的文件夹。