Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Groovy] 쉘 스크립트처럼 실행하기 Computer & Program

groovy 스크립트를 실행시킬 때 아래와 같이 groovy 명령을 사용하면 된다.

groovy your/GroovyScript.groovy [arguments]


그런데 꼭 groovy 명령을 사용해야 하나?? 귀찮다. 쉘 스크립트처럼 파일명으로 바로 실행할 수 있었으면 좋겠다. 역시.. 모든게 다 준비 돼 있었어..

#!/usr/bin/env groovy
println 'Hello world!!'
for (arg in args) {
    println '  ' + arg
}


groovy 명령을 PATH 환경변수에 잡아주고, 맨 윗줄처럼 적어두면 쉘 스크립트처럼 파일명만으로도 실행시킬 수 있다. 실행시키려면 실행권한도 줘야게찡??

$ chmod +x helloWorld.groovy
$ ./helloWorld.groovy this is arguments
Hello world!!
  this
  is
  arguments
$


groovy 역시 멋진 녀석.. 문서에는 linux에서는 argument를 전달할 수 없을거라고 되어 있는데, CentOS에서는 잘 된다. linux의 shebang(#!)으로 실행할 때 groovy의 전달인자가 아닌 다른 전달인자로 인식될 수 있는 것 같다. 내 경우는 잘 되는걸 보니 리눅스 종류나 버전에 따라 다를 수 있는 것 같다.

수정 덧) 권남님 댓글을 보고..
Note that you will not be able to provided any arguments to groovy when running with the shebang(#!) on Linux because the arguments are treated as part of the name of the command to run. Mac OS X will interpret additional arguments correctly.

권남님 댓글을 보고 Groovy - Running 설명을 다시 자세히 보니 "any arguments to groovy"다. 덧글에 써주신 것 처럼 groovy 명령의 옵션과 args 전달인자의 차이.. 예를 들어, (약간의 억지가 있지만 예를 들기 위해) 아래와 같은 groovy 명령의 옵션으로 -D를 사용해 보자. groovy 명령으로 실행시키면 groovy 명령의 옵션으로 줄 수 있지만, 스크립트로 실행시키면 스크립트의 옵션이 되어 버린다. (그런데 또 미스테리한게.. MacOS X -ㅅ-;;;)

$ cat test.groovy
#!/usr/bin/env groovy
println "testOpt: ${System.getProperty('testOpt')?:'Not available'}"
println "args: ${args}"
$ groovy -DtestOpt=testValue test.groovy hello world
testOpt: testValue
args: [hello, world]
$ groovy -DtestOpt=testValue test.groovy
testOpt: testValue
args: []
$ ./test.groovy -DtestOpt=testValue hello world
testOpt: Not available
args: [-DtestOpt=testValue, hello, world]
$ ./test.groovy hello world
testOpt: Not available
args: [hello, world]
$


- 참고
Groovy - Running
Groovy - Groovy CLI

덧글

  • 권남 2012/09/21 10:56 # 답글

    설명에 나온 인자 전달은 그루비 스크립트에 대한 것이 아니라 groovy 에 대한 것을 뜻하는 것으로 보입니다.

    groovy -xx -yy zzz.groovy -qq

    여기서 -xx 와 -yy 는 그루비에 대한 인자이며, 이것을 전달할 수 없는 것이지요. 그루비 스크립트에 대한 인자 전달(-qq)은 잘되는게 맞아보입니다.
  • Sigel 2012/09/22 02:21 #

    아.. 그렇죠.. groovy의 전달인자와 스크립트의 전달인자..
    문서를 멍하니 보다 보니 헷갈렸네요. 왱알왱알 @ㅅ@
    감사합니다. :D
댓글 입력 영역

Google AdSense (text/image)