Git alias无法找到bash脚本文件,尽管它位于路径中

Git alias无法找到bash脚本文件,尽管它位于路径中,git,bash,path,alias,git-bash,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 t

我想使用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!!!";
}
我的路径如下所示:

/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

Q:我如何解决这个问题,或者更好地调试它?这简直让我受不了香蕉三明治

我的设置是:

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

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

将您的别名替换为
echo$PATH;shopt源路径

这将检查您的
PATH
,如果
source
允许使用它(请参阅:如果
shopt
内置命令的
sourcepath
选项已关闭,则不会搜索
PATH

如注释中所示,路径未导出(因此子进程(如别名生成的子进程)未继承所述变量)

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


查看“”和,您需要一个
%USERPROFILE%\.bash\u profile
来查找
.bashrc

我不“做”Windows,因此不确定Windows 10上有什么,但此错误的特征是使用
/bin/sh
运行bash
source
命令,而该命令没有
source
命令。您可以使别名与Unix/Linux系统上的
sh
兼容,或与
/bin/bash
一起运行。不确定在Windows上可以执行什么操作。是否可以在git bash中运行
源代码“test\u script.sh”
?它有用吗?如果没有-错误是什么?为什么不
{source”/path/to/test\u schipt.sh“…
?感谢您提出了一种调试此命令的方法。让git别名运行此命令会显示一个不包含包含脚本的文件夹的路径。顺便说一句,shopt soucepath处于“打开”状态。我做错了什么?我如何不断地将mt脚本文件夹添加到此红色的“git路径”中?键入
导出路径=…
(您的所有路径,包括脚本文件夹)后是否可以尝试相同的别名是的,让git别名将我想要的文件夹添加到红色的“git路径”中有效。因此,对于调用该脚本的每个别名,我都需要导出路径并添加文件夹?听起来很奇怪,我可以接受,但我很高兴知道另一种方法来不断地将我的文件夹添加到此Git路径,而不是在执行Git时添加command@Mercury否:我的目的是检查路径是否已导出(即所有进程都将继承它)或者不需要。您只需要将导出添加到
%USERPROFILE%\.bashrc
,以使任何bash进程都考虑到正确的路径。包括您的别名。问题是,我正在导出文件夹并将其添加到.bashrc中。my.bashrc看起来像:
导出路径=$PATH:/c/Users/guylevy/scripts
,单独使用它将不会影响您的工作ot影响这个GIT路径,它就像GIT不注意一样。