2013-09-10 267 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個字節都是相同的(這是舊學校使它成爲文件的「幻數」) –