我想使用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
问:我如何解决这个问题,或者更好地调试这个问题?这让我开始香蕉三明治
我的设置是:
答案 0 :(得分:1)
如果您不想使用文件的绝对路径(因为您希望别名可以在不同的上下文中重用),您需要检查PATH实际上是什么。
将您的别名替换为echo $PATH; shopt sourcepath
这将检查您的PATH
和source
是否允许使用它(请参阅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
。