javashellruntime.exec

java Runtime.exec to run shell script


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()?


Solution

  • 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)