Runtime.exec help please

  • Follow


I am trying to use Runtime.exec to run a command and pass it a parameter.I need it to preserve the spaces in the parameter but cannot get it to work.E.gMy code saysString cmd = "sh1 xxxx                 1234";Process child = Runtime.getRuntime().exec(cmd);the sh1 bash shell saysecho '$@' = $@echo '$1' = $1echo '$2' = $2When I run it it displays$@ = xxxx 1234$1 = xxxx$2 = 1234I want it to pass the code "as is" so as one parameterSo it would display$@ = xxxx                 1234$1 = xxxx                 1234$2 =I could even cope with$@ = xxxx                 1234$1 = xxxx$2 = 1234I have tried different variation of single and double quotes without any success.-- Steve
0
Reply Steve 7/25/2007 1:56:43 PM

On Jul 25, 6:56 am, "Steve Rainbird"<news.nos...@rainbird.me.nospam.uk> wrote:> I am trying to use Runtime.exec to run a command and pass it a parameter.>> I need it to preserve the spaces in the parameter but cannot get it to work.>> E.g>> My code says>> String cmd = "sh1 xxxx                 1234";> Process child = Runtime.getRuntime().exec(cmd);>> the sh1 bash shell says>> echo '$@' = $@> echo '$1' = $1> echo '$2' = $2>> When I run it it displays>> $@ = xxxx 1234> $1 = xxxx> $2 = 1234>> I want it to pass the code "as is" so as one parameter>> So it would display>> $@ = xxxx                 1234> $1 = xxxx                 1234> $2 =>> I could even cope with>> $@ = xxxx                 1234> $1 = xxxx> $2 = 1234>> I have tried different variation of single and double quotes without any> success.>> --> Stevedid you try:String command = "sh1 \"first      second\"";Runtime.getRuntime().exec(command);Alternatively, look into the the ProcessBuilder class, it gives youmore control over individual parameters.  Its also more secure ifyou're getting data from the user.  Not completely secure mind you,but it does make sure that arguments are escaped appropriately foryour shell.
0
Reply Daniel 7/25/2007 2:23:59 PM


"Daniel Pitts" <googlegroupie@coloraura.com> wrote in message news:1185373439.279259.276660@z24g2000prh.googlegroups.com...> On Jul 25, 6:56 am, "Steve Rainbird"> <news.nos...@rainbird.me.nospam.uk> wrote:>> I am trying to use Runtime.exec to run a command and pass it a parameter.>>>> I need it to preserve the spaces in the parameter but cannot get it to >> work.>>>> E.g>>>> My code says>>>> String cmd = "sh1 xxxx                 1234";>> Process child = Runtime.getRuntime().exec(cmd);>>>> the sh1 bash shell says>>>> echo '$@' = $@>> echo '$1' = $1>> echo '$2' = $2>>>> When I run it it displays>>>> $@ = xxxx 1234>> $1 = xxxx>> $2 = 1234>>>> I want it to pass the code "as is" so as one parameter>>>> So it would display>>>> $@ = xxxx                 1234>> $1 = xxxx                 1234>> $2 =>>>> I could even cope with>>>> $@ = xxxx                 1234>> $1 = xxxx>> $2 = 1234>>>> I have tried different variation of single and double quotes without any>> success.>>>> -->> Steve>> did you try:> String command = "sh1 \"first      second\"";> Runtime.getRuntime().exec(command);Yep tried that.I got$@ = "xxxx 1234"$1 = "xxxx$2 = 1234"BTW I have unset IFS in the shellso if I just executesh1 "xxxxxx      1234"it does exaclty what I need$@ = xxxxxx      1234$1 = xxxxxx      1234$2 =>> Alternatively, look into the the ProcessBuilder class, it gives you> more control over individual parameters.  Its also more secure if> you're getting data from the user.  Not completely secure mind you,> but it does make sure that arguments are escaped appropriately for> your shell.>I will look into ProcessBuilder thanks.-- Steve
0
Reply Steve 7/25/2007 2:29:46 PM

"Steve Rainbird" <news.nospam@rainbird.me.nospam.uk> wrote in message news:5gp52dF3hefrfU1@mid.individual.net...> "Daniel Pitts" <googlegroupie@coloraura.com> wrote in message > news:1185373439.279259.276660@z24g2000prh.googlegroups.com...>> On Jul 25, 6:56 am, "Steve Rainbird">> <news.nos...@rainbird.me.nospam.uk> wrote:>>> I am trying to use Runtime.exec to run a command and pass it a >>> parameter.>>>>>> I need it to preserve the spaces in the parameter but cannot get it to >>> work.>>>>>> E.g>>>>>> My code says>>>>>> String cmd = "sh1 xxxx                 1234";>>> Process child = Runtime.getRuntime().exec(cmd);>>>>>> the sh1 bash shell says>>>>>> echo '$@' = $@>>> echo '$1' = $1>>> echo '$2' = $2>>>>>> When I run it it displays>>>>>> $@ = xxxx 1234>>> $1 = xxxx>>> $2 = 1234>>>>>> I want it to pass the code "as is" so as one parameter>>>>>> So it would display>>>>>> $@ = xxxx                 1234>>> $1 = xxxx                 1234>>> $2 =>>>>>> I could even cope with>>>>>> $@ = xxxx                 1234>>> $1 = xxxx>>> $2 = 1234>>>>>> I have tried different variation of single and double quotes without any>>> success.>>>>>> -->>> Steve>>>> did you try:>> String command = "sh1 \"first      second\"";>> Runtime.getRuntime().exec(command);>> Yep tried that.>> I got>> $@ = "xxxx 1234"> $1 = "xxxx> $2 = 1234">>> BTW I have unset IFS in the shell>> so if I just execute>> sh1 "xxxxxx      1234"> it does exaclty what I need>> $@ = xxxxxx      1234> $1 = xxxxxx      1234> $2 =>>>>> Alternatively, look into the the ProcessBuilder class, it gives you>> more control over individual parameters.  Its also more secure if>> you're getting data from the user.  Not completely secure mind you,>> but it does make sure that arguments are escaped appropriately for>> your shell.>>>> I will look into ProcessBuilder thanks.>> -- > Steve>>>ProcessBuilder seems to be the solution thanks.      String cmd = "sh1";       String arg = "xxxx                 1234";       Process child = new ProcessBuilder(cmd,arg).start();$@ = "xxxx                 1234"$1 = "xxxx                 1234"$2 =-- Steve
0
Reply Steve 7/25/2007 2:42:37 PM

Steve Rainbird wrote:> I am trying to use Runtime.exec to run a command and pass it a parameter.> > I need it to preserve the spaces in the parameter but cannot get it to work.Consider "the other" entry point:public Process exec(String[] cmdarray)              throws IOExceptionThe parameters are "nicely separate" in the array,as opposed to the entry point you're using:public Process exec(String command)              throws IOExceptionI think what's causing your trouble is this behaviour: >>The command argument is parsed into tokens >>and then executed as a command in a separate process.Reading documentation is sometimes helpful.  BugBear
0
Reply bugbear 7/25/2007 3:13:54 PM

4 Replies
323 Views

(page loaded in 0.084 seconds)

Similiar Articles:













7/19/2012 7:45:27 PM


Reply: