how to call shell commands from groovy correctly

2019-04-30 01:38发布

问题:

i want to execute shell commands from my groovy script. I tested the following:

"mkdir testdir".execute()

and this just works fine. Now i wanted to make a file, write something to the file and then open a text editor to view the file.

def execute(cmd) {
   def proc =  cmd.execute()
   proc.waitFor()
}

execute("touch file")
execute("echo hello > file")
execute("gedit file")

Now gedit opens correctly but ther is no "hello" string in the file. How is this working?!?

回答1:

You cannot do redirection in the line:

execute("echo hello > file")

So nothing gets written to the file. The easiest way to handle this is probably to wrap all your commands into a single shell script, then execute this script.

Otherwise, you can read the standard output from the echo command (without the > file), and then write this to file yourself in Groovy.

Or you can do:

execute( [ 'bash', '-c', 'echo hello > file' ] )

Which should work as your execute method will just perform the List.execute() method