Friday, October 7, 2022

[SOLVED] java Runtime.exec to run shell script

Issue

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)



Answered By - Jayan
Answer Checked By - Robin (WPSolving Admin)