7

I am working on an application an have an issue about running shell command from java application. here is the code:

public String execRuntime(String cmd) {

        Process proc = null;
        int inBuffer, errBuffer;
        int result = 0;
        StringBuffer outputReport = new StringBuffer();
        StringBuffer errorBuffer = new StringBuffer();

        try {
            proc = Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            return "";
        }
        try {
            response.status = 1;
            result = proc.waitFor();
        } catch (InterruptedException e) {
            return "";
        }
        if (proc != null && null != proc.getInputStream()) {
            InputStream is = proc.getInputStream();
            InputStream es = proc.getErrorStream();
            OutputStream os = proc.getOutputStream();

            try {
                while ((inBuffer = is.read()) != -1) {
                    outputReport.append((char) inBuffer);
                }

                while ((errBuffer = es.read()) != -1) {
                    errorBuffer.append((char) errBuffer);
                }

            } catch (IOException e) {
                return "";
            }
            try {
                is.close();
                is = null;
                es.close();
                es = null;
                os.close();
                os = null;
            } catch (IOException e) {
                return "";
            }

            proc.destroy();
            proc = null;
        }


        if (errorBuffer.length() > 0) {
            logger
                    .error("could not finish execution because of error(s).");
            logger.error("*** Error : " + errorBuffer.toString());
            return "";
        }


        return outputReport.toString();
    }

but when i try to exec command like :

/export/home/test/myapp -T "some argument"

myapp reads "some argument" as two seperated arguments.but I want to read "some argument" as only a argument. when i directly run this command from terminal, it executed successfully. I tried '"some argument"' ,""some argument"" , "some\ argument" but did not work for me. how can i read this argument as one argument.

casperOne
  • 73,706
  • 19
  • 184
  • 253
masay
  • 923
  • 2
  • 17
  • 34

2 Answers2

16

I recall that the an overload of exec method provides a parameter for the arguments seperately. You need to use that

Yup. Here is it

public Process exec(String[] cmdarray)
             throws IOException

Just make the command line and all arguments Seperate elements of the String array

Midhat
  • 17,454
  • 22
  • 87
  • 114
  • [When `Runtime.exec()` won’t: Navigate yourself around pitfalls related to the `Runtime.exec()` method](http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html) or possibly a future-proof [search engine query](https://duckduckgo.com/?q=When+Runtime.exec+wont+Navigate+yourself+around+pitfalls+related+to+the+Runtime.exec+method). – Greg Bacon Jun 09 '16 at 21:05
-3

first make a string
String cmd="/export/home/test/myapp -T \"some argument\"";
then run cmd in proc

Yasir
  • 15