2010-12-29 3 views
1

Можно создать дубликат:
How to run Unix shell script from java code?Java и Unix подтверждение

Я создаю веб-приложений с Spring MVC, который будет приложение многопользовательский. Каждый пользователь будет создавать собственные конфигурации и т.д. и т.п.

Когда все настройки выполняются они должны начать строительство и запуск своего проекта с помощью веб-приложения (исполняемый сценарий оболочки от Java), сегодня я наткнулся на этот пост в то время как прибегая к помощи

How to run Unix shell script from Java code?

что такое ваше мнение по этому вопросу, есть ли лучший способ сделать это, кроме Runtime.getRuntime() ...

+2

возможно дубликат [Как запустить скрипт Unix из кода Java] (http://stackoverflow.com/questions/525212/how-to-run-unix- shell-script-from-java-code). Рассмотрим самый популярный ответ, который является превосходным в вашем случае. И, если бы вы были в типичной кросс-платформенной необходимости, я бы предложил вам пойти муравью. – Riduidel

+0

+1 по дублированию –

ответ

0

немного лучше всего использовать класс ProcessBuilder, что обеспечивает более удобный API.

0

1.

есть лучший способ сделать это, кроме Runtime.getRuntime()

Что вы имеете в виду "лучше"?

2.

Runtime.getRuntime().exec(myCommand); 

Это работает очень хорошо, но имейте в виду, что .bashrc (или аналогичные установки среды) не будет выполняться в этом случае. Более того, вы не фиксируете выход.

3. Как вспомогательная записка. Вот мой интерфейс оболочки:

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 ~"); 
    } 
} 
Смежные вопросы