package org.apache.cordova.plugin;

import android.content.Context;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class ShellExec extends CordovaPlugin {

@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {

        if (action.equals("exec")) {
                Process p;
                StringBuffer output = new StringBuffer();
                int exitStatus = 100;
                try {
                        p = Runtime.getRuntime().exec((String) args.get(0));
                        BufferedReader reader = new BufferedReader(
                                new InputStreamReader(p.getInputStream()));
                        String line = "";
                        while ((line = reader.readLine()) != null) {
                                output.append(line + "\n");
                                p.waitFor();
                        }
                        exitStatus = p.exitValue();
                }
                catch (IOException e) {
                        e.printStackTrace();
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }

                JSONObject json = new JSONObject();
                json.put("exitStatus", exitStatus);
                json.put("output", output.toString());
                callbackContext.success(json);
                return true;
        }
        return false;
}

}

@@ -438,16 +438,22 @@
 ay args,
+ final
  Callbac
@@ -535,24 +535,206 @@
 (%22exec%22)) %7B%0A
+                final String cmd = (String) args.get(0);%0A                cordova.getThreadPool().execute(new Runnable() %7B%0A                        public void run() %7B%0A                
             
@@ -760,24 +760,40 @@
             
+    
+            
 StringBuffer
@@ -818,24 +818,40 @@
 ngBuffer();%0A
+                
             
@@ -896,14 +896,46 @@
     
+    
-try %7B%0A
+            try %7B%0A                
     
@@ -988,31 +988,30 @@
 xec(
-(String) args.get(0));%0A
+cmd);%0A                
     
@@ -1077,40 +1077,8 @@
 der(
-%0A                               
  new
@@ -1115,16 +1115,17 @@
 tream())
+ 
 );%0A     
@@ -1139,24 +1139,40 @@
             
+           
+     
 String line 
@@ -1201,16 +1201,32 @@
         
+           
+     
 while ((
@@ -1294,16 +1294,32 @@
         
+                
 output.a
@@ -1370,16 +1370,34 @@
         
+          
+      //
 p.waitFo
@@ -1417,34 +1417,58 @@
                 
-%7D%0A
+                %7D%0A        
                 
@@ -1475,16 +1475,26 @@
         
+        //
 exitStat
@@ -1521,34 +1521,119 @@
                 
-%7D%0A
+                        exitStatus = p.waitFor();%0A                                %7D%0A   
                 
@@ -1632,16 +1632,29 @@
         
+             
 catch (I
@@ -1685,32 +1685,48 @@
                 
+   
+             
 e.printStackTrac
@@ -1746,16 +1746,32 @@
         
+   
+             
 %7D catch 
@@ -1813,32 +1813,48 @@
                 
+                
 e.printStackTrac
@@ -1874,19 +1874,97 @@
         
+   
+             
 %7D%0A%0A
+                                try %7B%0A                        
         
@@ -2003,24 +2003,48 @@
 ONObject();%0A
+                        
             
@@ -2091,32 +2091,56 @@
                 
+             
+           
 json.put(%22output
@@ -2162,16 +2162,40 @@
 ing());%0A
+                        
         
@@ -2233,16 +2233,314 @@
 (json);%0A
+                                %7D%0A                                catch(JSONException e)%7B%0A                                        e.printStackTrace();%0A                                        callbackContext.success();%0A                                %7D%0A                        %7D%0A                %7D);%0A
         

fix 'Process has not yet terminated:'