【问题标题】:GVM/Grails shell script bug?GVM/Grails shell 脚本错误?
【发布时间】:2014-06-06 23:08:33
【问题描述】:

我在 Ubuntu (14.04) 上,刚刚安装了最新版本的 GVM (1.3.13)。然后我用它来安装 Grails (2.3.7)、Groovy (2.2.2) 和 Gradle (1.11)。

Groovy 和 Gradle 似乎安装得非常好(我可以执行他们的 SDK 命令,例如groovyc 等)。但是每当我从 any 目录执行 any Grails 命令时,我的整个终端屏幕都会清除,暂停一秒钟,然后重新绘制我的命令行提示符。该命令永远不会被执行。几个月前,在 Nabble 上,另一位用户报告了a very similar issue。

在 shell 中,如果我执行 echo $GRAILS_HOME,我会得到:

/home/myuser/.gvm/grails/current

如果我执行echo $PATH,我确实看到/home/myuser/.gvm/grails/current/bin 在我的系统路径上。

然后我决定深入挖掘并实际访问$GRAILS_HOME。这是一个实际指向/home/myuser/.gvm/grails/2.3.7 的符号链接。所以当我去那里时,我看到一个正常的 Grails 安装,包括一个bin 目录。当我进入 bin 目录时,我看到了:

grails-debug
grails.bat
grails-debug.bat
startGrails.bat
startGrails
grails

我打开grails(一个shell脚本)并看到:

#!/bin/sh
trap "reset" EXIT
trap "reset" INT
trap "reset" TERM

DIRNAME=`dirname "$0"`
. "$DIRNAME/startGrails"

startGrails org.codehaus.groovy.grails.cli.GrailsScriptRunner "$@"

我修改如下:

#!/bin/sh
trap "reset" EXIT
trap "reset" INT
trap "reset" TERM

echo "1..."
sleep 2s

DIRNAME=`dirname "$0"`

echo "2...dirname is $DIRNAME"
sleep 8s

. "$DIRNAME/startGrails"

echo "3..."
sleep 2s

startGrails org.codehaus.groovy.grails.cli.GrailsScriptRunner "$@"

然后保存/退出并从外壳运行grails help。这是我的输出:

1...
2...dirname is /home/zharvey/.gvm/grails/current/bin

输出的最后一行 ("2...dirname is...") 暂停 2 秒,然后我的屏幕清空(就像我发出了 clear 命令一样)我的提示再次出现。我的实际命令(grails help)在任何时候都不会实际执行或生成输出。因此,似乎存在错误的确切行是:

. "$DIRNAME/startGrails"

这一行到底在做什么,为什么会导致脚本失败?

我的问题

  • 有人可以确认这实际上是 Grails 或 GVM 错误,而不是我安装错误的情况吗?
  • 最重要的是,谁能告诉我我能做些什么来解决这个问题并让 Grails 尽快启动并运行?

【问题讨论】:

  • 你'...打开一个新终端,或在现有终端中运行以下命令:source "${GVM_DIR}/bin/gvm-init.sh"' 在安装 gvm 结束时(安装完成时打印)?
  • 感谢@tim_yates (+1) - 不,我没有(最初)。我现在只是这样做了,但它并没有改变任何东西。仍然与上述功能相同。

标签: shell grails ubuntu path gvm


【解决方案1】:

面临同样的问题。我的解决方案是sudo update-alternatives --install /usr/bin/startGrails startGrails /opt/grails-2.4.3/bin/startGrails 2

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我的问题是我错误地设置了 JAVA_HOME 变量。虽然 JAVA 确实在我的机器上工作,但设置如下:

    JAVA_HOME=/usr/lib/jvm/jdk1.8.0/bin
    export JAVA_HOME
    PATH=$PATH:$JAVA_HOME
    export PATH
    

    显然,当我更仔细地查看它时,我发现了我的错误并将上面设置为:

    JAVA_HOME=/usr/lib/jvm/jdk1.8.0
    export JAVA_HOME
    PATH=$PATH:$JAVA_HOME/bin
    export PATH
    

    只是一个细微的差别,但它现在和命令确实可以正常工作

    grails
    

    并没有像上面解释的那样默默地失败。

    希望对你有帮助!!

    【讨论】:

      【解决方案3】:

      我通过一些(非常痛苦的)调试解决了这个问题。

      在GRAILS_HOME/bin/startGrails(POSIX 脚本)中有一行检查JAVA_HOME 是否设置正确。

      我没有按照推荐的方式安装我的 JDK。我不喜欢使用apt-get 为我配置Java。我喜欢自己下载 JDK 并自己添加JAVA_HOME 到PATH。这是问题的根源。

      由于 JAVA_HOME 在我的 Ubuntu 机器上没有正确设置(因为我选择了手动/不鼓励的方法而不是 apt-get 方法),startGrails 脚本失败了(请注意,来吧 Grails团队...)因为它无法访问JAVA_HOME:

      if [ -z "$JAVA_HOME" ] ; then
          die "JAVA_HOME environment variable is not set"
      

      所以我只是将其更改为:

      if [ -z "$JAVA_HOME" ] ; then
          export JAVA_HOME="<value of my $JAVA_HOME var as defined in ~/.bashrc>"
      

      我会留下这个,因为我显然不是唯一遇到这个的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 2014-11-05
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多