2016-07-01 8 views
1

私はすでに.SHファイルを作成し、内部は次のとおりです。プロセスビルダを使用して.shファイルを実行する方法

sudo iptables --flush 
sudo iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP 

私は、端末上でそれを実行したときにそれが正常に動作しますが、私はProcessBuilderをを使用する場合、それは何もしませんでした。エラーは、しかし、何も起こらなかった、これは私のjavaのコードではありません:

Process pb = new ProcessBuilder("/bin/bash","/my/file.sh").start(); 

私はすでに答えを探しているが、私はまだでも、私は同じことで操作を行い、.SHファイルを実行することができませんでした既にそれをやった人。 申し訳ありません、これが悪い質問の場合は、ありがとうございます。

+0

おそらくパスワードを待っています。あなたはユーザーのためのパスワードなしでsudoをセットアップしましたか? –

+0

Processbuilderのみを使用したいのですか他の回避策も機能するかもしれません –

+0

コマンドはどのようなものですか? – Wilson

答えて

0

bashが実行されていませんか? startメソッドから返されたProcessオブジェクトを確認しましたか?このオブジェクトから出力値、出力ストリームなどを取得できます。

0

エラーをストリームと出口値で確認してください...おそらくsudoが問題です。

必ずしも最良のコードではありませんが、それは仕事を完了します。プロセスを実行し、process.streamsを取得してSystem.outに出力します。問題が実際にどのようなものであるかを知ることができます。 Java APIのランタイムから

ProcessBuilder pb = new ProcessBuilder(args); 
    pb.redirectErrorStream(true); 

    final Process proc = pb.start();  

    final StringBuilder builder = new StringBuilder("Process output"); 

    final Thread logThread = new Thread() { 
     @Override 
     public void run() { 
      InputStream is = proc.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

       try { 
        String line; 

        do { 
         line = reader.readLine(); 
         builder.append(""); 
         builder.append(line == null ? "" : line); 
         builder.append("<br/>");  
        } while(line != null); 

       } catch (IOException e) { 
        builder.append("Exception! ").append(e.getMessage()); 
       } finally { 
        try { 
         reader.close(); 
        } catch (IOException e) { 
         builder.append("Exception! ").append(e.getMessage()); 
        } 
       } 
      } 
     }; 

    logThread.start(); 
    int retVal = proc.waitFor(); 
    System.out.println(builder.toString()); 
0

http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

// Java runtime 
Runtime runtime = Runtime.getRuntime(); 
// Command 
String[] command = {"/bin/bash", "/my/file.sh"}; 
// Process 
Process process = runtime.exec(command); 

また、あなたはrootパスワードの入力を求められる場合がありsudoのコマンドを使用して注意する必要があります。

関連する問題