Git别名找不到bash脚本文件,尽管它在PATH中

时间:2017-09-14 21:57:01

标签: git bash path alias git-bash

我想使用git别名从git bash shell调用bash函数,所以我使.gitconfig看起来像:

[alias]
    jjj = "!f() { source "test_script.sh"; foo $@; }; f;"
    st = status

我的test_script.sh在

/c/Users/myname/scripts/

test_script.sh文件如下所示:

#!/bin/bash 
function foo {
    echo "This is a test script, calling foo!!!";
}

我的PATH看起来像这样:

/c/Users/myname/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/myname/bin:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/System32/WindowsPowerShell/v1.0:/c/Program Files/nodejs:/cmd:/c/Program Files (x86)/Brackets/command:/c/Program Files/Java/jdk1.8.0_111/bin:%APPDATA%/../Local/Android/sdk/platform-tools:/c/Users/myname/scripts:/c/Users/myname/AppData/Roaming:/c/Users/myname/scripts:/usr/bin/vendor_perl:/usr/bin/core_perl:/c/Users/myname/scripts

跑步时得到的结果:git jjj是:

f() { source 'test_script.sh' && foo $@; }; f;: line 0: source: test_script.sh: file not found

尽管我的PATH env变量中包含了test_script.sh文件的路径,但仍然存在此错误。 请注意,当我从任何地方运行test_script.sh时,我都会成功触发test_script.sh

问:我如何解决这个问题,或者更好地调试这个问题?这让我开始香蕉三明治

我的设置是:

  • 操作系统:Windows 10
  • Git版本:2.11.0.windows.1

1 个答案:

答案 0 :(得分:1)

如果您不想使用文件的绝对路径(因为您希望别名可以在不同的上下文中重用),您需要检查PATH实际上是什么。

将您的别名替换为echo $PATH; shopt sourcepath

这将检查您的PATHsource是否允许使用它(请参阅man bash:如果sourcepath内置命令的shopt选项已关闭,PATH未被搜索

正如评论中所见,PATH未被导出(因此别名产生的子进程没有继承所述变量)

export PATH=...中添加(.bashrc)是不够的。

查看“Bash doesn't read .bashrc unless manually started”和bashrc not loaded in /bin/bash shell,您需要%USERPROFILE%\.bash_profile采购.bashrc