[unix] Running Groovy script from the command line

When I did which groovy, I got the below output:

/usr/local/bin/groovy

So I went ahead and created a helloworld.groovy with the below content

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

After that I did chmod +x helloworld.groovy and attempted to run the file with ./hellworld.groovy and sadly, I got this error ./helloworld.groovy: line 2: print: command not found

I could get rid of the error by changing to

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

Why would the first method cause the error?

This question is related to unix groovy

The answer is


It will work on Linux kernel 2.6.28 (confirmed on 4.9.x). It won't work on FreeBSD and other Unix flavors.

Your /usr/local/bin/groovy is a shell script wrapping the Java runtime running Groovy.

See the Interpreter Scripts section of EXECVE(2) and EXECVE(2).


#!/bin/sh
sed '1,2d' "$0"|$(which groovy) /dev/stdin; exit;

println("hello");

You need to run the script like this:

groovy helloworld.groovy