Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows 7上使用GIT BASH时发生Groovy引导错误_Git_Unix_Groovy_Cygwin - Fatal编程技术网

在Windows 7上使用GIT BASH时发生Groovy引导错误

在Windows 7上使用GIT BASH时发生Groovy引导错误,git,unix,groovy,cygwin,Git,Unix,Groovy,Cygwin,我正在调用git钩子来预提交。这将触发对groovy脚本的调用,并以允许远程调试钩子执行的方式执行。像这样: #!/usr/bin/env groovy groovy -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8085,suspend=y "C:\Users\.......hooks\PreCommit.groovy" 当我使用GIT BASH触发钩子时,我看到以下错误: /c/Program Files

我正在调用git钩子来预提交。这将触发对groovy脚本的调用,并以允许远程调试钩子执行的方式执行。像这样:

#!/usr/bin/env groovy
groovy -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8085,suspend=y "C:\Users\.......hooks\PreCommit.groovy"
当我使用GIT BASH触发钩子时,我看到以下错误:

/c/Program Files (x86)/Groovy/Groovy-2.1.0/bin/startGroovy: line 96: [: too many arguments org.codehaus......: startup failed: .... expected EOF, found ':' @ line 3 column 35]
当我快速查看startGroovy文件时,我看到以下不清楚的代码-其中第96行是GROOVY home的if条件:

# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
  [ -n "$GROOVY_HOME" ] && GROOVY_HOME=`cygpath --unix "$GROOVY_HOME"`
  [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"`
  [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CP" ] && CP=`cygpath --path --unix "$CP"`
else
  if [ -n "$GROOVY_HOME" -a `expr "$GROOVY_HOME":'\/$'` ] ; then
      GROOVY_HOME=`echo $GROOVY_HOME | sed -e 's/\/$//'`
  fi
fi
这是groovy引导程序中的错误吗?
我的windows 7将其环境变量GROOVY\u HOME正确指向:C:\program file(x86)\GROOVY\GROOVY-2.1.0。一种解决方案是对git使用完整的cygwin安装,但可能类似于使用unix样式的目录名创建自己的.bashrc:

# Check to see what the DOS directories are
echo GROOVY_HOME=$GROOVY_HOME
echo JAVACMD=$JAVACMD
echo JAVA_HOME=$JAVA_HOME
echo CP=$CP

# Add the directories you found to .bashrc in a unix style
cat - >>~.bashrc
export GROOVY_HOME='/c/program file (x86)/Groovy/Groovy-2.1.0'
export JAVACMD="..."
export JAVA_HOME="/c/Program files/Java/jre7/bin/java"
export CP= "..."

请根据需要更改路径。您可以使用记事本++或其他编辑器而不是cat来编辑.bashrc。请记住,cat-命令在Bash中使用Control-D终止,而DOS copy con file.txt使用Control-Z。通过将这些变量放置在.bashrc中,它们不会干扰DOS环境变量。

问题出在Groovy的脚本中。脚本没有在所有正确的位置正确引用env变量GROOVY_HOME。GROOVY_HOME表示的路径中的空格(在我的例子中是“Program Files(x86)”有2个空格)被解释为分隔符,并导致路径被解析为多个参数。要解决此问题,请更改windows环境变量GROOVY_HOME的定义,以使用路径的平铺版本。编辑环境变量GROOVY_HOME(在Vista上,启动/右键单击计算机/属性/高级系统设置/环境变量/用户或系统,我的是系统)并设置为c:/Progra~2/GROOVY/GROOVY-2.1.3。当您启动Git、MinGW或CygWin shell时,将不会有空格,也不会出现任何错误。

这是一个有趣的观察结果。不过,我只是测试了一下,运气不好。事实证明,
if$cygwin
为false,因此无论如何都不会调用cygpath,因此错误必须出现在
if[-n“$GROOVY\u HOME”-a'expr“$GROOVY\u HOME”:“\/$”;然后GROOVY\u HOME='echo$GROOVY\u HOME | sed-e的/\/$/''fi
。我已经在我的.bashrc中插入了导出,虽然在startGroovy文件中设置了一个echo似乎是正确的,但它将显示GROOVY_主格式仍然是windows。