Adj*_*ion 6 shell ubuntu grails path gvm
我在Ubuntu(14.04)上安装了最新版本的GVM(1.3.13).然后我用它来安装Grails(2.3.7),Groovy(2.2.2)和Gradle(1.11).
Groovy和Gradle似乎安装得很好(我可以执行他们的SDK命令,比如groovyc等).但每当我执行任何 Grails命令时,从任何目录,我的整个终端的屏幕都会清除,暂停一秒钟,然后重新绘制我的命令行提示符.该命令永远不会被执行.几个月前,在Nabble上,另一位用户报告了一个非常类似的问题.
从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
Run Code Online (Sandbox Code Playgroud)
我打开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 "$@"
Run Code Online (Sandbox Code Playgroud)
我将其修改如下:
#!/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 "$@"
Run Code Online (Sandbox Code Playgroud)
然后保存/退出并grails help从shell运行.这是我的输出:
1...
2...dirname is /home/zharvey/.gvm/grails/current/bin
Run Code Online (Sandbox Code Playgroud)
最后一行输出(" 2 ... dirname is ... ")暂停2秒,然后我的屏幕清除(就像我发出clear命令一样)并且我的提示重新出现.我的实际命令(grails help)实际上没有执行或生成输出.所以似乎错误存在的确切行是:
. "$DIRNAME/startGrails"
Run Code Online (Sandbox Code Playgroud)
这条线甚至在做什么,为什么会导致脚本失败?
我通过一些(非常痛苦的)调试解决了这个问题。
在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"
Run Code Online (Sandbox Code Playgroud)
所以我只是将其更改为:
if [ -z "$JAVA_HOME" ] ; then
export JAVA_HOME="<value of my $JAVA_HOME var as defined in ~/.bashrc>"
Run Code Online (Sandbox Code Playgroud)
我将把这个问题保留下来,因为我显然不是唯一遇到这种情况的人。