Provides a shell-like capability for handling external processes.
Module Overview
Groosh is a Unix like shell written in Groovy. It has also been known as the Process Module but was renamed (back) when it was updated to work with Groovy 1.0.
The current version of Groosh is 0.3.6
Download
Distributions
Source code and binary releases are available at http://kenai.com/projects/groovy-groosh.
Groosh can be used via Grapes.
Note: If Ivy (Grapes) can not download Groosh add the file
grapeConfig.xml
to your
~/.groovy
directory with the following content:
<ivysettings> <property name="ivy.checksums" value=""/> <settings defaultResolver="downloadGrapes"/> <resolvers> <chain name="downloadGrapes"> <filesystem name="cachedGrapes"> <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/> <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/> </filesystem> <!-- todo add 'endorsed groovy extensions' resolver here --> <ibiblio name="codehaus" root="http://repository.codehaus.org/" m2compatible="true"/> <ibiblio name="ibiblio" m2compatible="true"/> <ibiblio name="java.net2" root="http://download.java.net/maven/2/" m2compatible="true"/> </chain> </resolvers> </ivysettings>
There seams to be some problem with checksums generated by Maven 2.2.1
Installing
No installation required. Groosh can be added to Groovy using Grapes.
Try the following script to check if it worked:
@Grapes([ @Grab(group='org.codehaus.groovy.modules',module='groosh',version='[0.3.6,)'), @GrabConfig(systemClassLoader=true) ]) import groosh.Groosh Groosh.withGroosh(this) ls() >> stdout
Pre-requisites
Groosh is based on Groovy 1.7.0 or higher.
Documentation
The following example shows Groosh in action:
//Read a text file and write it to stdout @Grapes([ @Grab(group='org.codehaus.groovy.modules',module='groosh',version='[0.3.6,)'), @GrabConfig(systemClassLoader=true) ]) import groosh.Groosh Groosh.withGroosh(this) cat('test_scripts/blah.txt') >> stdout
Another example :
//Count the lines of all .java files in this directory and all its subdirectories. //Write the total number of lines to stdout. @Grapes([ @Grab(group='org.codehaus.groovy.modules',module='groosh',version='[0.3.6,)'), @GrabConfig(systemClassLoader=true) ]) import groosh.Groosh Groosh.withGroosh(this) def f = find('.', '-name', '*.java', '-ls') def total = 0 def lines = grid { values,w -> def x = values[2,4,6,10] def s = x.join(' ') w.println(s) total += Integer.parseInt(values[6]) } f | lines lines >> stdout println "Total: ${total}"
Sometimes the name of a shell command conflicts with a Groovy method (for example ''grep''). This means that
gsh.grep(...)
does not execute the shell command, but the Groovy method grep(...).
As a workaround for that you may prefix any shell command with _ this means the example above becomes
gsh._grep(...)
The following example shows a more elaborate example. It uploads photos to a flickr account using the command line tool flickcurl. A photo set of this images is created and named after the current directory.
import static groosh.Groosh.groosh import static org.codehaus.groovy.groosh.stream.DevNull.devnull ids = [:] shell = groosh() //get all images in this folder and upload it to flickr //remember the photo id we get from flickr shell.ls().grep(~/.*jpg/).each { println "Uploading file $it to flickr" flickcurl = shell.flickcurl("upload",it,"friend","family").useError(true) id = flickcurl.grep(~/.*Photo ID.*/)[0].split(":")[1].trim() ids[it] = id println "Photo ID is: $id" } //we need to know the first photo id firstKey = ids.keySet().toList()[0] //create a set with the name of the directory we are in right now //use the id of the first photo as set cover setName = shell.pwd().text.split("/")[-1] println "Creating set: $setName" flickcurl = shell.flickcurl("photosets.create",setName,setName,ids[firstKey]).useError(true) id = flickcurl.grep(~/.*Photoset.*/)[0].split(" ")[2].trim() println "Photoset ID is: $id" //make a backup of the ids in a file for later reference println "Writing ids to a file" file = new File(shell.pwd().text.trim() + "/.flickrset") file << "Photoset:" << id << "\n" ids.each { file << it.key << ":" << it.value << "\n" } //the first photo is already part of the photo set so lets remove it ids.remove(firstKey) //add the remaining photos to the photo set ids.each { println "Adding photo to set at flickr: $it" shell.flickcurl("photosets.addPhoto",id,it.value) | devnull() } println "DONE"
Developers
Source Control
The Groosh source code is available from https://svn.kenai.com/svn/groovy-groosh~subversion.
Building
Building without Netbeans
Check out the source from
https://svn.kenai.com/svn/groovy-groosh~subversion
Groosh uses Maven 2 for building. You have to have Maven 2 installed.
Just execute mvn in the groosh directory groosh gets build.
Community
For mailing lists, issue trackers, forums etc see http://kenai.com/projects/groovy-groosh











