【问题标题】:How to extend Git (Windows) with scripts that inherit shell variables?如何使用继承 shell 变量的脚本扩展 Git (Windows)?
【发布时间】:2018-12-28 04:03:16
【问题描述】:

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

我有一个 Perl 脚本,我希望在我运行命令 git my-script 时让 Git 拾取并执行。我确保脚本在我的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 变量中定义的目录(需要的目录)输出相同的目录except

git my-script 调用的哪个 shell 不会继承我的 PERL5LIB 变量?这是特定于 Windows 的问题吗?是否需要调整其他配置文件,或者必须定义一些系统变量?

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

【问题讨论】:

    标签: bash git shell perl


    【解决方案1】:

    git my-script 调用的哪个 shell 不会继承我的 PERL5LIB 变量?

    因为 Git 有自己的 Perl。

    这在 Git 2.20(2018 年第四季度)中更加明确:

    commit 0e218f9commit bdfbb0ecommit 70fc579commit 409670f(2018 年 10 月 30 日)Johannes Schindelin (dscho)
    (由 Junio C Hamano -- gitster -- 合并到 commit 6c268fd,2018 年 11 月 13 日)

    mingw:默认取消设置PERL5LIB

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

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

    为了使此功能可扩展(并且可覆盖),有一个新的配置设置 core.unsetenvvars 允许在生成进程之前指定一个以逗号分隔的名称列表以取消设置。

    加布里埃尔·福尔曼报道。

    在您的情况下,您可以将core.unsetenvvar 设置为“空”以取消设置PERL5LIB,但您还必须将PERL5LIB 调整为GITPERLLIB加上你自己的文件夹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 2012-06-30
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 2011-06-25
      • 1970-01-01
      相关资源
      最近更新 更多