java Runtime.exec to run shell script
Asked Answered
H

1

2

I am using Runtime.getRuntime().exec() to run a shell script from Java code. The code works fine when I pass the parameter as string

      Runtime.getRuntime().exec("sh test.sh")

Since I have to pass additional arguments which are paths with spaces, so I replaced String with String array.

      String[] cmd = {"sh test.sh", "/Path/to my/resource file"};
      Runtime.getRuntime().exec(cmd)

I also tried with

      String[] cmd = {"sh test.sh"};
      Runtime.getRuntime().exec(cmd)

But neither of them worked. It's throwing an exception:

   java.io.IOException: Cannot run program "sh test.sh":
   java.io.IOException: error=2, No such file or directory

Why is the same script file when passed as String worked and when used with String array is throwing exception? How can I make this work with string array as argument to Runtime.exec()?

Hobgoblin answered 11/10, 2012 at 6:7 Comment(1)
You should be use the ProcessBuilder as mentioned in your previous question #12812845Bar
A
5

First string became the command. There is no file 'sh test.sh' to be executed.

Change

 String[] cmd = {"sh test.sh", "/Path/to my/resource file"};

to

String[] cmd = {"sh",  "test.sh", "/Path/to my/resource file"};

(In general use process builder API)

Anagnorisis answered 11/10, 2012 at 6:10 Comment(3)
What will be my first string in the array if I am going to run a batch file ?Hobgoblin
Am not sure but try using String[] cmd = {"run", "test.bat", "/Path/to my/resource file"};Turnbow
As far as I remember String[] cmd = {"test.bat", "/Path/to my/resource file"}; should work.Kiruna

© 2022 - 2024 — McMap. All rights reserved.