"Steve Rainbird" <> wrote in message
news:...
> "Daniel Pitts" <> wrote in message
> news: oups.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
|