명령행에서 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 를 참고하세요.