Hi!
I am curious why you don't directly use the shebang line?
http://docs.groovy-lang.org/docs/latest/html/documentation/core-syntax.html#_shebang_line
On 06/02/2015 11:25 AM, Maarten Boekhold wrote:
Hi all,
I recently discovered a neat trick to create a standalone groovy
script on UNIX that you can run as if it was a shell/bash script. The
first part of the trick I got from the following StackOverflow post:
http://stackoverflow.com/questions/306139/how-do-i-include-jars-in-a-groovy-script/30503877#30503877
You can "embed" a groovy script inside a bash script as follows:
#!/bin/bash
//usr/bin/env /path/to/groovy "$0" @0; exit $?
println "My groovy script"
This launches a bash shell that runs the groovy interpreter /on this
same file/ ("$0"), because "//usr/bin/env" is just equivalent to
"/usr/bin/env" (eg the double leading slash is collapsed to a single
slash by bash). Groovy ignores the first line if it starts with a #,
and the second line starts with // which is a comment in groovy.
If you need to add classpath entries or java properties or any other
command line options to groovy, you can insert them on that second
line as well of course, but that can generate quite a long and
unreadable line if you have a lot of entries. However you can use the
same "// trick" to set environment variables /before/ you launch groovy:
#!/bin/bash
//usr/bin/true && export CLASSPATH=....
//usr/bin/true && export OPTS="-Dmy.opt1=foo -Dmy.opt2=bar"
//usr/bin/true && export OPTS="$OPTS -Dmy.opt3=foobar"
//path/to/groovy $OPTS "$0" @0; exit $?
println System.env[my.opt1]
Note that on the line starting groovy you don't even need to prefix it
with //usr/bin/env as long as you use a fully qualified path to the
groovy interpreter. If you want bash to find groovy in your PATH
however you do need that //usr/bin/env prefix.
Neat eh? Maybe we can include this in the documentation somewhere?
Maarten
--
Cédric Champeau
Groovy language developer
http://twitter.com/CedricChampeau
http://melix.github.io/blog