Search code examples
javalinuxjakarta-eecygwin

Getting error in calling shell script in windows environment using java code and cygwin...!


I want to call shell script on windows environment using java code. I am trying to execute code below to run my test script(not actual script):

Java Code:

public static void main (String args[]) {
        Runtime r = Runtime.getRuntime();
        try {
            Process p = r.exec("C:\\cygwin\\bin\\bash -c '/cygdrive/d/scripts/test.sh'");
            InputStream in = p.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            System.out.println("OUT:");
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

            in = p.getErrorStream();
            br = new BufferedReader(new InputStreamReader(in));
            System.out.println("ERR:");
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

            p.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

test.sh

#!/bin/bash

rm -rf ./test

But I am getting these error and script in not able to remove the directory.

ERR: /cygdrive/d/ereader/scripts/test.sh: line 2: $'\r': command not found /cygdrive/d/ereader/scripts/test.sh: line 3: rm: command not found

Another thing, when I run the script from the cygwin terminal it works fine. I checked the path variable they all are fine. But I try to execute same script through java code it gives error..

Now how to tell java program where to refer for rm commands?


Solution

  • probably you will need to set the PATH variable first thing in the test.sh script. Make sure rm is in the PATH you set