2010-12-29 2 views
1

Possible en double:
How to run Unix shell script from java code?Java et Unix corroboration

Je crée une application web avec ressort mvc, qui sera l'application multi-utilisateurs. Chaque utilisateur créer vos propres configurations, etc etc

Lorsque toute la configuration se fait, ils devraient commencer à construire et de gérer leur projet à partir de l'application Web (exécution d'un script shell de Java), aujourd'hui je suis tombé sur ce poste tout en googler

How to run Unix shell script from Java code?

Quelle est votre opinion à ce sujet, est-il une meilleure façon de faire autre que Runtime.getRuntime() ...

+2

double possible de [? Comment exécuter un script shell Unix à partir du code java] (http://stackoverflow.com/questions/525212/how-to-run-unix- shell-script-from-java-code) Pensez à utiliser la réponse la plus populaire, qui est excellente dans votre cas. Et, si vous étiez dans un besoin typiquement multi-plateforme, je vous suggérerais d'aller à la fourmi. – Riduidel

+0

+1 sur Dupliquer –

Répondre

0

un peu mieux est d'utiliser la classe ProcessBuilder qui fournit des API plus pratique.

0

1.

est-il une meilleure façon de faire autre que Runtime.getRuntime()

Que voulez-vous dire par "mieux"?

2.

Runtime.getRuntime().exec(myCommand); 

Cela fonctionne très bien, mais il faut garder à l'esprit que le .bashrc (ou la configuration de l'environnement similaire) ne seront pas exécutées dans ce cas. De plus, vous ne capturez pas la sortie.

3. Juste comme une note auxiliaire. Voici mon interface à la coquille:

import java.io.*; 

public class Shell 
{ 
    Process proc; 
    BufferedReader in; 
    BufferedReader err; 
    PrintWriter out; 

    public Shell() throws IOException 
    { 
     proc = Runtime.getRuntime().exec("/bin/bash"); 
     in = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     err = new BufferedReader(new InputStreamReader(proc.getErrorStream())); 
     out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true); 

     exec("source ~/.bashrc"); 
    } 


    public void exec(String cmd) 
    { 
     out.println(cmd); 

     try { 
      while (in.ready()) 
       System.out.println(in.readLine()); 

      while (err.ready()) 
       System.err.println(err.readLine()); 
     } 
     catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 
    } 

    public void close() 
    { 
     try { 
      out.println("exit"); 
      proc.waitFor(); 

      while (in.ready()) 
       System.out.println(in.readLine()); 

      while (err.ready()) 
       System.err.println(err.readLine()); 

      in.close(); 
      out.close(); 
      proc.destroy(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void execute(String command) throws IOException 
    { 
     System.out.println("Executing: " + command); 
     Shell shell = new Shell(); 
     shell.exec(command); 
     shell.close(); 
    } 

    public static void main(String[] args) throws IOException 
    { 
     Shell.execute("ls -l ~"); 
    } 
}