Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

명령행에서 Groovy 사용하기

Groovy 명령행(groovy 또는 groovy.bat)은 Groovy 언어를 처음 사용하기에 가장 쉬운 방법입니다.

$groovy -help
usage: groovy
 -c,--encoding <charset>   specify the encoding of the files
 -e <script>               specify a command line script
 -h,--help                 usage information
 -i <extension>            modify files in place
 -l <port>                 listen on a port and process inbound lines
 -n                        process files line by line
 -p                        process files line by line and print result
 -v,--version              display the Groovy and JVM versions

주어진 Groovy 스크립트를 다음과 같이 바로 실행해볼 수 있습니다.

$ cat test.groovy 
println 'Hello Bonson'

$ groovy test.groovy 
Hello Bonson

명령행 인자를 전달하려면 아래와 같이 합니다:

$ cat test.groovy 
println 'Hello ' + args[0]

$ groovy test.groovy Jeeves
Hello Jeeves

하지만, 위와 같이 간단한 Groovy 프로그램이라면 명령행에서 직접 스크립트를 입력하여 실행할 수도 있습니다:

$ groovy -e "println 'Hello Bob'"
Hello Bob

이것만 보면 그리 유용할 것 같지 않지만, 이러한 용법은 간단한 프로그램들을 조합해서 강력한 명령을 만들어낸다는 UNIX의 전통과 잘 어울립니다. perk, sed, awk, grep 같은 도구들이 이러한 용도로 많이 쓰이지만, 많은 사용자들이 이러한 도구들의 이해하기 힘든 문법들 보다는 자바 문법에 더 익숙할 것이고, 따라서 Groovy 문법에도 익숙할 것입니다:

$ grep -i ^groov /usr/share/dict/words | groovy -e 'print System.in.text.toUpperCase()'
GROOVE
GROOVELESS
GROOVELIKE
GROOVER
GROOVERHEAD
GROOVINESS
GROOVING
GROOVY

표준입력(STDIN) 혹은 입력 파일을 한줄씩 처리하며 루프를 도는 것은 흔한 일이라서 Groovy(그리고 Ruby, Perl 등)는 이런 작업을 편하게 할 수 있는 방법을 제공합니다. 현재는 Groovy가 출력을 flush 하지 않고 있기 때문에 제대로 작동하지 않습니다.

-n 명령을 통해 실행하면 입력의 각 행을 처리하며 루프를 돌게 됩니다. 각 행은 line이라는 변수로 접근할 수 있습니다.

grep -i ^groov /usr/share/dict/words | groovy -n -e 'println line.toUpperCase()'

각 행을 처리한 결과를 출력하고자 한다면 -p 명령을 주면 됩니다. 그러면 아래와 같이 더 짧게 쓸 수 있게 됩니다:

grep -i ^groov /usr/share/dict/words | groovy -p -e 'line.toUpperCase()'

-i 명령도 같이 사용하면 출력을 원본 파일에 쓰게 됩니다. And wreak havoc on our local file system, with wide-scale search and replace.

groovy -p -i .bak -e '(line =~ "<h\\d>(.*)</h\\d>").replaceAll("$1")' ~/Desktop/cooluri.html

Or to really get into groovy (literally)

find . -name \*.java | xargs groovy -p -i -e '(line =~ "@author James Strachan").replaceAll("@author Bobby Bonson")'

더 많은 예제나 통찰을 얻으려면 Perl One Liners 를 찾아보세요.

듣기 모드

듣기 모드로 Groovy를 실행할 수도 있습니다. 듣기 모드에서는 Groovy를 TCP 포트에 연결합니다. (-l <port> 명령. 기본 포트는 1960).

해당 포트로 새 연결이 맺어질 때 마다 Groovy는 각 입력 행에 대해 주어진 스크립트를 수행합니다. 아래의 한 줄 코드는 입력된 각 행을 뒤집어서 반환합니다. 이 스크립트를 시험해보려면 로컬 머신의 1960 포트로 telnet을 통해 접속해보면 됩니다:

groovy -l -e "println line.reverse()"

앞에서 설명한 -p 옵션을 함께 쓰면 스크립트 실행 결과를 자동으로 출력하게 만들 수 있습니다.

따라서, 아래의 한 줄 코드는 위 코드와 동일한 기능을 수행합니다:

groovy -l -p -e "line.reverse()"

유용한 명령행 스크립트에 대한 더 많은 예제는 CVS 를 참고하세요.

  • No labels