You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Chris Fouts <ch...@ziftsolutions.com> on 2018/05/30 17:57:21 UTC

Running a shell script with return value?

Inside groovy, I want to write a shell script that parses the output of
some shell command and get some string value back. How can I get the value
of the shell command?

For example say I want to get the file size of some_file, I'll do

x = sh returnStatus: true, script: '''
  IFS=" " read -ra LINE <<< `ls -al | grep some_file`
  echo ${LINE[4]}
'''

How can I store the value of ${LINE[4]} in a groovy variable to use later?

Thanks,
Chris

Re: Running a shell script with return value?

Posted by "Nelson, Erick" <Er...@hdsupply.com>.
You might want to not use dollar slashy and use just slashy or ‘’’ as dollar slashy interpolates….or …. Just escape the dollar sign in your shell script with a \

Erick Nelson
Senior Developer – IT
HD Supply Facilities Maintenance
(858) 740-6523


From: Chris Fouts <ch...@ziftsolutions.com>
Reply-To: "users@groovy.apache.org" <us...@groovy.apache.org>
Date: Wednesday, May 30, 2018 at 12:38 PM
To: "users@groovy.apache.org" <us...@groovy.apache.org>
Subject: Re: Running a shell script with return value?

Thanks. Here's the complete code snippet


#!/usr/bin/env groovy

String cmd = $/

  IFS=" " read -ra LINE <<< `ls -al | grep Music`

  echo ${LINE[4]}

/$

StringBuilder outstr = new StringBuilder()

StringBuilder errstr = new StringBuilder()

Process proc = cmd.execute()

proc.waitForProcessOutput(outstr, errstr)

println $output



When I run it, I get

Caught: groovy.lang.MissingPropertyException: No such property: LINE for class: file

groovy.lang.MissingPropertyException: No such property: LINE for class: file

at file.run(file.groovy:5)



On Wed, May 30, 2018 at 2:59 PM Nelson, Erick <Er...@hdsupply.com>> wrote:
I mistyped
It is …

$/
/$

Similar to
'''
'''

They are known as “dollar slashy strings”

Erick Nelson
Senior Developer – IT
HD Supply Facilities Maintenance
(858) 740-6523<tel:(858)%20740-6523>


From: Chris Fouts <ch...@ziftsolutions.com>>
Reply-To: "users@groovy.apache.org<ma...@groovy.apache.org>" <us...@groovy.apache.org>>
Date: Wednesday, May 30, 2018 at 11:55 AM
To: "users@groovy.apache.org<ma...@groovy.apache.org>" <us...@groovy.apache.org>>
Subject: Re: Running a shell script with return value?

Thanks. Do the /$ designate a begin/end fo the commands I want to execute? So using my example, I do

String cmd = /$
  IFS=" " read -ra LINE <<< `ls -al | grep some_file`
  echo ${LINE[4]}
/$

On Wed, May 30, 2018 at 2:20 PM Nelson, Erick <Er...@hdsupply.com>> wrote:



String cmd = /$

What you want to shell out and execute here

Remember, java shells out as sh, not bash or your shell of choice

/$

// output and error can be any class that implements Appendable

StringBuilder output = new StringBuilder()

StringBuilder error = new StringBuilder ()

Process proc = cmd.execute()

proc.waitForProcessOutput(output, error)

println proc.exitValue()


Erick Nelson
Senior Developer – IT
HD Supply Facilities Maintenance
(858) 740-6523<tel:(858)%20740-6523>


From: Chris Fouts <ch...@ziftsolutions.com>>
Reply-To: "users@groovy.apache.org<ma...@groovy.apache.org>" <us...@groovy.apache.org>>
Date: Wednesday, May 30, 2018 at 10:58 AM
To: "users@groovy.apache.org<ma...@groovy.apache.org>" <us...@groovy.apache.org>>
Subject: Running a shell script with return value?

Inside groovy, I want to write a shell script that parses the output of some shell command and get some string value back. How can I get the value of the shell command?

For example say I want to get the file size of some_file, I'll do

x = sh returnStatus: true, script: '''
  IFS=" " read -ra LINE <<< `ls -al | grep some_file`
  echo ${LINE[4]}
'''

How can I store the value of ${LINE[4]} in a groovy variable to use later?

Thanks,
Chris

Re: Running a shell script with return value?

Posted by MG <mg...@arscreat.com>.
http://groovy-lang.org/syntax.html#all-strings


On 30.05.2018 21:38, Chris Fouts wrote:
> Thanks. Here's the complete code snippet
>
> #!/usr/bin/env groovy
>
> String cmd = $/
>
> IFS=" " read -ra LINE <<< `ls -al | grep Music`
>
> echo ${LINE[4]}
>
> /$
>
> StringBuilder outstr = new StringBuilder()
>
> StringBuilder errstr = new StringBuilder()
>
> Process proc = cmd.execute()
>
> proc.waitForProcessOutput(outstr, errstr)
>
> println $output
>
>
> When I run it, I get
>
> Caught: groovy.lang.MissingPropertyException: No such property: LINE 
> for class: file
>
> groovy.lang.MissingPropertyException: No such property: LINE for 
> class: file
>
> at file.run(file.groovy:5)
>
>
>
> On Wed, May 30, 2018 at 2:59 PM Nelson, Erick 
> <Erick.Nelson@hdsupply.com <ma...@hdsupply.com>> wrote:
>
>     I mistyped
>
>     It is …
>
>     $/
>
>     /$
>
>     Similar to
>
>     '''
>
>     '''
>
>     They are known as “dollar slashy strings”
>
>     Erick Nelson
>
>     Senior Developer – IT
>
>     HD Supply Facilities Maintenance
>
>     (858) 740-6523 <tel:%28858%29%20740-6523>
>
>     *From: *Chris Fouts <chrisfouts@ziftsolutions.com
>     <ma...@ziftsolutions.com>>
>     *Reply-To: *"users@groovy.apache.org
>     <ma...@groovy.apache.org>" <users@groovy.apache.org
>     <ma...@groovy.apache.org>>
>     *Date: *Wednesday, May 30, 2018 at 11:55 AM
>     *To: *"users@groovy.apache.org <ma...@groovy.apache.org>"
>     <users@groovy.apache.org <ma...@groovy.apache.org>>
>     *Subject: *Re: Running a shell script with return value?
>
>     Thanks. Do the /$ designate a begin/end fo the commands I want to
>     execute? So using my example, I do
>
>     String cmd = /$
>
>     IFS=" " read -ra LINE <<< `ls -al | grep some_file`
>
>     echo ${LINE[4]}
>
>     /$
>
>     On Wed, May 30, 2018 at 2:20 PM Nelson, Erick
>     <Erick.Nelson@hdsupply.com <ma...@hdsupply.com>> wrote:
>
>         String cmd = /$
>
>         What you want to shell out and execute here
>
>         Remember, java shells out as sh, not bash or your shell of choice
>
>         /$
>
>         // output and error can be any class that implements Appendable
>
>         StringBuilder output = new StringBuilder()
>
>         StringBuilder error = new StringBuilder ()
>
>         Process proc = cmd.execute()
>
>         proc.waitForProcessOutput(output, error)
>
>         println proc.exitValue()
>
>         Erick Nelson
>
>         Senior Developer – IT
>
>         HD Supply Facilities Maintenance
>
>         (858) 740-6523 <tel:%28858%29%20740-6523>
>
>         *From: *Chris Fouts <chrisfouts@ziftsolutions.com
>         <ma...@ziftsolutions.com>>
>         *Reply-To: *"users@groovy.apache.org
>         <ma...@groovy.apache.org>" <users@groovy.apache.org
>         <ma...@groovy.apache.org>>
>         *Date: *Wednesday, May 30, 2018 at 10:58 AM
>         *To: *"users@groovy.apache.org
>         <ma...@groovy.apache.org>" <users@groovy.apache.org
>         <ma...@groovy.apache.org>>
>         *Subject: *Running a shell script with return value?
>
>         Inside groovy, I want to write a shell script that parses the
>         output of some shell command and get some string value back.
>         How can I get the value of the shell command?
>
>         For example say I want to get the file size of some_file, I'll do
>
>         x = sh returnStatus: true, script: '''
>
>           IFS=" " read -ra LINE <<< `ls -al | grep some_file`
>
>           echo ${LINE[4]}
>
>         '''
>
>         How can I store the value of ${LINE[4]} in a groovy variable
>         to use later?
>
>         Thanks,
>
>         Chris
>


Re: Running a shell script with return value?

Posted by Chris Fouts <ch...@ziftsolutions.com>.
Thanks. Here's the complete code snippet

#!/usr/bin/env groovy

String cmd = $/

  IFS=" " read -ra LINE <<< `ls -al | grep Music`

  echo ${LINE[4]}

/$

StringBuilder outstr = new StringBuilder()

StringBuilder errstr = new StringBuilder()

Process proc = cmd.execute()

proc.waitForProcessOutput(outstr, errstr)

println $output


When I run it, I get

Caught: groovy.lang.MissingPropertyException: No such property: LINE for
class: file

groovy.lang.MissingPropertyException: No such property: LINE for class: file

at file.run(file.groovy:5)



On Wed, May 30, 2018 at 2:59 PM Nelson, Erick <Er...@hdsupply.com>
wrote:

> I mistyped
>
> It is …
>
>
>
> $/
>
> /$
>
>
>
> Similar to
>
> '''
>
> '''
>
>
>
> They are known as “dollar slashy strings”
>
>
>
> Erick Nelson
>
> Senior Developer – IT
>
> HD Supply Facilities Maintenance
>
> (858) 740-6523
>
>
>
>
>
> *From: *Chris Fouts <ch...@ziftsolutions.com>
> *Reply-To: *"users@groovy.apache.org" <us...@groovy.apache.org>
> *Date: *Wednesday, May 30, 2018 at 11:55 AM
> *To: *"users@groovy.apache.org" <us...@groovy.apache.org>
> *Subject: *Re: Running a shell script with return value?
>
>
>
> Thanks. Do the /$ designate a begin/end fo the commands I want to execute?
> So using my example, I do
>
>
>
> String cmd = /$
>
>   IFS=" " read -ra LINE <<< `ls -al | grep some_file`
>
>   echo ${LINE[4]}
>
> /$
>
>
>
> On Wed, May 30, 2018 at 2:20 PM Nelson, Erick <Er...@hdsupply.com>
> wrote:
>
>
>
> String cmd = /$
>
> What you want to shell out and execute here
>
> Remember, java shells out as sh, not bash or your shell of choice
>
> /$
>
> // output and error can be any class that implements Appendable
>
> StringBuilder output = new StringBuilder()
>
> StringBuilder error = new StringBuilder ()
>
> Process proc = cmd.execute()
>
> proc.waitForProcessOutput(output, error)
>
> println proc.exitValue()
>
>
>
>
>
> Erick Nelson
>
> Senior Developer – IT
>
> HD Supply Facilities Maintenance
>
> (858) 740-6523
>
>
>
>
>
> *From: *Chris Fouts <ch...@ziftsolutions.com>
> *Reply-To: *"users@groovy.apache.org" <us...@groovy.apache.org>
> *Date: *Wednesday, May 30, 2018 at 10:58 AM
> *To: *"users@groovy.apache.org" <us...@groovy.apache.org>
> *Subject: *Running a shell script with return value?
>
>
>
> Inside groovy, I want to write a shell script that parses the output of
> some shell command and get some string value back. How can I get the value
> of the shell command?
>
>
>
> For example say I want to get the file size of some_file, I'll do
>
>
>
> x = sh returnStatus: true, script: '''
>
>   IFS=" " read -ra LINE <<< `ls -al | grep some_file`
>
>   echo ${LINE[4]}
>
> '''
>
>
>
> How can I store the value of ${LINE[4]} in a groovy variable to use later?
>
>
>
> Thanks,
>
> Chris
>
>

Re: Running a shell script with return value?

Posted by "Nelson, Erick" <Er...@hdsupply.com>.
I mistyped
It is …

$/
/$

Similar to
'''
'''

They are known as “dollar slashy strings”

Erick Nelson
Senior Developer – IT
HD Supply Facilities Maintenance
(858) 740-6523


From: Chris Fouts <ch...@ziftsolutions.com>
Reply-To: "users@groovy.apache.org" <us...@groovy.apache.org>
Date: Wednesday, May 30, 2018 at 11:55 AM
To: "users@groovy.apache.org" <us...@groovy.apache.org>
Subject: Re: Running a shell script with return value?

Thanks. Do the /$ designate a begin/end fo the commands I want to execute? So using my example, I do

String cmd = /$
  IFS=" " read -ra LINE <<< `ls -al | grep some_file`
  echo ${LINE[4]}
/$

On Wed, May 30, 2018 at 2:20 PM Nelson, Erick <Er...@hdsupply.com>> wrote:



String cmd = /$

What you want to shell out and execute here

Remember, java shells out as sh, not bash or your shell of choice

/$

// output and error can be any class that implements Appendable

StringBuilder output = new StringBuilder()

StringBuilder error = new StringBuilder ()

Process proc = cmd.execute()

proc.waitForProcessOutput(output, error)

println proc.exitValue()


Erick Nelson
Senior Developer – IT
HD Supply Facilities Maintenance
(858) 740-6523<tel:(858)%20740-6523>


From: Chris Fouts <ch...@ziftsolutions.com>>
Reply-To: "users@groovy.apache.org<ma...@groovy.apache.org>" <us...@groovy.apache.org>>
Date: Wednesday, May 30, 2018 at 10:58 AM
To: "users@groovy.apache.org<ma...@groovy.apache.org>" <us...@groovy.apache.org>>
Subject: Running a shell script with return value?

Inside groovy, I want to write a shell script that parses the output of some shell command and get some string value back. How can I get the value of the shell command?

For example say I want to get the file size of some_file, I'll do

x = sh returnStatus: true, script: '''
  IFS=" " read -ra LINE <<< `ls -al | grep some_file`
  echo ${LINE[4]}
'''

How can I store the value of ${LINE[4]} in a groovy variable to use later?

Thanks,
Chris

Re: Running a shell script with return value?

Posted by Chris Fouts <ch...@ziftsolutions.com>.
Thanks. Do the /$ designate a begin/end fo the commands I want to execute?
So using my example, I do

String cmd = /$

  IFS=" " read -ra LINE <<< `ls -al | grep some_file`

  echo ${LINE[4]}

/$

On Wed, May 30, 2018 at 2:20 PM Nelson, Erick <Er...@hdsupply.com>
wrote:

>
>
> String cmd = /$
>
> What you want to shell out and execute here
>
> Remember, java shells out as sh, not bash or your shell of choice
>
> /$
>
> // output and error can be any class that implements Appendable
>
> StringBuilder output = new StringBuilder()
>
> StringBuilder error = new StringBuilder ()
>
> Process proc = cmd.execute()
>
> proc.waitForProcessOutput(output, error)
>
> println proc.exitValue()
>
>
>
>
>
> Erick Nelson
>
> Senior Developer – IT
>
> HD Supply Facilities Maintenance
>
> (858) 740-6523
>
>
>
>
>
> *From: *Chris Fouts <ch...@ziftsolutions.com>
> *Reply-To: *"users@groovy.apache.org" <us...@groovy.apache.org>
> *Date: *Wednesday, May 30, 2018 at 10:58 AM
> *To: *"users@groovy.apache.org" <us...@groovy.apache.org>
> *Subject: *Running a shell script with return value?
>
>
>
> Inside groovy, I want to write a shell script that parses the output of
> some shell command and get some string value back. How can I get the value
> of the shell command?
>
>
>
> For example say I want to get the file size of some_file, I'll do
>
>
>
> x = sh returnStatus: true, script: '''
>
>   IFS=" " read -ra LINE <<< `ls -al | grep some_file`
>
>   echo ${LINE[4]}
>
> '''
>
>
>
> How can I store the value of ${LINE[4]} in a groovy variable to use later?
>
>
>
> Thanks,
>
> Chris
>

Re: Running a shell script with return value?

Posted by "Nelson, Erick" <Er...@hdsupply.com>.

String cmd = /$

What you want to shell out and execute here

Remember, java shells out as sh, not bash or your shell of choice

/$

// output and error can be any class that implements Appendable

StringBuilder output = new StringBuilder()

StringBuilder error = new StringBuilder ()

Process proc = cmd.execute()

proc.waitForProcessOutput(output, error)

println proc.exitValue()


Erick Nelson
Senior Developer – IT
HD Supply Facilities Maintenance
(858) 740-6523


From: Chris Fouts <ch...@ziftsolutions.com>
Reply-To: "users@groovy.apache.org" <us...@groovy.apache.org>
Date: Wednesday, May 30, 2018 at 10:58 AM
To: "users@groovy.apache.org" <us...@groovy.apache.org>
Subject: Running a shell script with return value?

Inside groovy, I want to write a shell script that parses the output of some shell command and get some string value back. How can I get the value of the shell command?

For example say I want to get the file size of some_file, I'll do

x = sh returnStatus: true, script: '''
  IFS=" " read -ra LINE <<< `ls -al | grep some_file`
  echo ${LINE[4]}
'''

How can I store the value of ${LINE[4]} in a groovy variable to use later?

Thanks,
Chris