2015-06-03 101 views
1

我幾乎死了試圖解決這個問題..有人可以幫助...請嗎?從java代碼運行一個shell腳本

下面是代碼:

import java.io.*; 
import java.lang.Runtime; 
import java.util.*; 

public class WORKBRO { 

    public static void main(String args[]) 
    { 
     try 
     {  
      String target = new String("/home/dhirendra.panwar/Desktop/test.sh"); 
      Runtime rt = Runtime.getRuntime(); 
      Process proc = rt.exec(target); 

     } catch (Throwable t) 
     { 
      t.printStackTrace(); 
     } 
    } 
} 
+0

你什麼異常?結果是什麼,你期望得到什麼? – Fredrik

+0

必須運行shell腳本test.sh ...但其不工作... –

+0

test.sh contains ... #!/ bin/bash echo「hola」>> dashboard.log –

回答

6

你的代碼是正確的,我相信你沒有得到例外,如果你看過使用proc.getErrorStream()你不會得到任何東西。
命令100%以這種方式得到執行,說現在的事情是,你正在呼應的東西,你需要使用BufferedReader讀回它。

檢查下面的例子,它將成功創建一個名爲「stackOverflow」的目錄並打印出您正在回顯的內容。爲了把它放到日誌文件中,我擔心你可以使用「>」來完成它,你可能不得不使用一些編輯器命令或使用Java創建文件。

底線:Runtime.getRuntime().exec("command")是從Java及其工程中執行Unix命令或腳本的正確方法。

test.sh

#!/bin/bash 
echo "hola" 
mkdir stackOverflow 

Test.java

import java.io.*; 
public class Test { 

     public static void main(String[] args) throws Exception { 
       try { 
         String target = new String("/home/hagrawal/test.sh"); 
// String target = new String("mkdir stackOver"); 
         Runtime rt = Runtime.getRuntime(); 
         Process proc = rt.exec(target); 
         proc.waitFor(); 
         StringBuffer output = new StringBuffer(); 
         BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
         String line = "";      
         while ((line = reader.readLine())!= null) { 
           output.append(line + "\n"); 
         } 
         System.out.println("### " + output); 
       } catch (Throwable t) { 
         t.printStackTrace(); 
       } 
     } 
} 
+0

沒有錯誤嘿謝謝確認,這肯定會正常工作... 我試過你的代碼.. hola打印在控制檯上是好的..這意味着腳本正在執行..但目錄「stackoverflow」沒有得到創建... 它的瘋狂...如果腳本正在運行,那麼該目錄也應該創建......它可能是什麼......? –

+1

在test.sh文件必須給其中該文件夾應該得到創建的絕對路徑... #!/斌/慶典 回聲「HOLA」 的mkdir/tmp目錄/計算器 –

+0

它是很好的做法,從調用腳本JAVA?任何性能問題? – kautuksahni