脚本的Git for windows bash执行路径不正确

脚本的Git for windows bash执行路径不正确,git,bash,git-bash,git-for-windows,Git,Bash,Git Bash,Git For Windows,当代码 SRC=$(cd $(dirname "$0"); pwd) 在安装了Git for Windows的系统上的Bash脚本内执行,该系统安装在c:\program files\Git中,SRC将获得值/c/program 我该怎么做? 我需要获取脚本所在的路径,并使用该路径包含具有相对路径的其他脚本。 就我而言,下一行是: 来源“${SRC}/common/common.sh” 脚本位于c:\program files\Git\usr\bin中,因此我可以使用Git并使用一些有用的手工

当代码

SRC=$(cd $(dirname "$0"); pwd)
在安装了Git for Windows的系统上的Bash脚本内执行,该系统安装在
c:\program files\Git
中,SRC将获得值
/c/program

我该怎么做? 我需要获取脚本所在的路径,并使用该路径包含具有相对路径的其他脚本。 就我而言,下一行是: 来源“${SRC}/common/common.sh”

脚本位于
c:\program files\Git\usr\bin
中,因此我可以使用
Git
并使用一些有用的手工命令扩展Git,以用于功能分支工作流以及rebase和子模块。

如果有人需要帮助,源代码位于。

您需要双引号引用
cd
命令的参数

SRC=$(cd "$(dirname "$0")"; pwd)
命令替换
$(dirname“$0”)
扩展为包含空格的路径。下面的
cd
命令获取两个参数,而您只想传递一个参数,其中包含一个空格


您不必担心另一对引号中
$0
的引号,因为
$()
命令替换会启动一个新的引用。

如您所述,您正在MINGW64下运行。您可以尝试使用
cygpath-aw
将路径转换为windows格式:

SRC=$(cygpath -aw $(cd "$(dirname "$0")"; pwd))

更多信息和。

请分享更多关于环境的信息:你在Cygwin下运行吗?我在运行MINGW64@JanLovstrand–你所问的可能有一些模棱两可之处。读了第二遍之后,我真的没有任何线索。你到底想要什么?等等,我想我明白了。您需要解析src目录:
src=$(cd“$”(dirname“${BASH_SOURCE[0]}”)&&pwd)
@JanLovstrand–如果这是错误的,请澄清问题。这个答案完全有效,但对于那些喜欢双引号的人(我假设所有Windows用户都需要这样):
src=“$(cd“$(dirname“$0”);“pwd”)”
这一款有效。抱歉,如果我没有注意到它是一个包含的脚本,有相同的错误。谢谢大家!!你不应该逃避内部引用吗
SRC=$(cd“$(dirname\“$0\”);pwd)
@phd否,请参阅我更新答案的最后一段。请认为问题出在行的$(dirname“$0”)部分,因为这会给我一个“参数太多”错误。我认为路径中的空间必须像/c/Program\Files/Git/usr/bin那样转义,但我不知道如何做到这一点。尝试了cygpath-u,但它给了我/c/Program Files/usr/binTry cygpath-aw请验证空格、引号等