从命令行运行Groovy脚本

jje*_*fer 36 unix groovy

当我这样做时which groovy,我得到以下输出:

/usr/local/bin/groovy
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/local/bin/groovy
println "hello world"
Run Code Online (Sandbox Code Playgroud)

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

我可以通过更改为删除错误

#!/usr/bin/env groovy
println "hello world"
Run Code Online (Sandbox Code Playgroud)

为什么第一种方法会导致错误?

gra*_*hey 54

您需要像这样运行脚本:

groovy helloworld.groovy
Run Code Online (Sandbox Code Playgroud)

  • `#!/ usr/local/bin/groovy`是groovy安装的确切位置.这使得脚本无法移植到其他地方安装了groovy的另一个系统.然而,`#!/ usr/bin/env` groovy使用参数"groovy"调用程序"/ usr/bin/env",而/ usr/bin/env正在搜索您的PATH变量以调用"groovy".<br> BTW:更好的shebang是`#!在/ usr/bin中/ env`.注意之间的空间!和/.这样每个"脚本"的前4个字节是相同的(这是旧学校,使其成为文件的"神奇数字") (13认同)
  • 或者只是'groovy helloworld`.:) (7认同)
  • 既然groovy也是一种脚本语言,我们应该能够像perl或python一样运行它吗?所以问题是为什么`./ helloworld.groovy`会返回关于`println`的错误.`#!/ usr/local/bin/groovy`和`#!/ usr/bin/env groovy`有什么区别? (6认同)
  • @DrUseful 也许如果你在 PDP-11 上运行,哈哈。否则,我认为这并不重要。(无论如何,幻数都是 8 个字节,现代(至少过去 10 年)UNIX exec() 函数仅查找 2 个字节 #! 来确定它是否是脚本) (2认同)