2013-09-10 331 views
24

当我做which groovy,我得到了下面的输出从命令行运行Groovy脚本

/usr/local/bin/groovy 

所以我继续创建helloworld.groovy与以下内容

#!/usr/local/bin/groovy 
println "hello world" 

之后,我做到了chmod +x helloworld.groovy并试图运行该文件与./hellworld.groovy和可悲的是,我得到了这个错误./helloworld.groovy: line 2: print: command not found

我可以得到通过改变

#!/usr/bin/env groovy 
println "hello world" 

摆脱错误的,所以我的问题是,为什么会第一种方法会导致错误?

+0

解释器脚本部分有关于这个主题在这个答案http://stackoverflow.com/questions/306139/how-do-i-include-jars-in-的大讨论a-groovy-script/8945888#8945888 – chim

+0

并且也在同一个问题上... http://stackoverflow.com/a/9692013/673282 – chim

回答

24

你需要运行这样的脚本:

groovy helloworld.groovy 
+4

或者只是'groovy helloworld'。 :) – dmahapatro

+6

因为groovy也是一种脚本语言,我们应该可以像perl或python一样运行它吧?所以问题是为什么'。/ helloworld.groovy'返回关于'println'的错误。 '#!/ usr/local/bin/groovy'和'#!/ usr/bin/env groovy'有什么区别? – jjennifer

+10

'#!/ usr/local/bin/groovy'是groovy安装的确切位置。这使得脚本无法移植到其他系统,其中Groovy被安装在别处。然而,这个'#!/ usr/bin/env'groovy使用参数“groovy”调用程序“/ usr/bin/env”,/ usr/bin/env正在搜索PATH变量来调用“groovy”。
顺便说一句:更好的shebang是'#!在/ usr/bin中/ env'。注意之间的空间!和/。这样,每个“脚本”的前4个字节都是相同的(这是旧学校使它成为文件的“幻数”) –