2014-09-29 60 views
3

我想通過Java在我的Ubuntu機器上運行bash腳本。 bash腳本需要2個輸入作爲參數,我作爲一個數組傳遞 但是,它似乎沒有將數組[0]和數組[1]的值傳遞給bash腳本?無法將參數發送到來自java的bash腳本

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import org.omg.CORBA.portable.InputStream; 

public class readBashScript { 

    public static void readBashScript() { 
     try { 

      String[] array = {"ys1","R"}; 

      Process proc = Runtime.getRuntime().exec("var/www/red/marsh_webreset.sh /",array); 
      BufferedReader read = new BufferedReader(new InputStreamReader(
        proc.getInputStream())); 
      try { 
       proc.waitFor(); 
      } catch (InterruptedException e) { 
       System.out.println(e.getMessage()); 
      } 
      while (read.ready()) { 
       System.out.println(read.readLine()); 
      } 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 
+0

我使用Runtime.exec來解決類似的問題。我認爲我的解決方案是直接在程序中包含參數來執行String – ControlAltDel 2014-09-29 18:58:29

+0

推薦的方法是使用['ProcessBuilder'](http://docs.oracle.com/javase/7/docs/api/java/lang/ ProcessBuilder.html),儘管使用shellshock這似乎是一個非常冒險的代碼。 – 2014-09-29 18:59:39

+0

當你直接在程序中說你的意思是在bash腳本中嗎?因爲我會從用戶的實時參數 – user3846091 2014-09-29 19:00:06

回答

1

你傳入的參數錯誤地嘗試下面的代碼:

Process proc = Runtime.getRuntime().exec("/var/www/redbutton/marsh_webreset.sh "+array[0]+" "+ array[1]+" /"); 
2

看看一些文檔。

要傳遞到exec方法的第二個參數是:

envp - 字符串數組,其中的每個元素具有在格式名=值環境變量的設置,或者爲null如果子進程應該繼承當前進程的環境。

我推薦看看thisthis

如果要傳遞環境變量,可以將它們添加爲數組,但必須採用格式「key = value」。

IE:

$ ONE = 1兩= 2 shell.sh

然後,您可以在你的shell腳本呼應這些變量。

$回聲$ ONE

+0

這是一個有效的批判,但它並沒有解決問題,或者? – ControlAltDel 2014-09-29 19:03:59

+0

編輯添加實際用法。 – proulxs 2014-09-29 19:13:01

0

它看起來像您所呼叫的錯誤Runtime.exec()方法。你正在傳遞一個命令和一個環境變量數組,但是你想把參數傳遞給你正在執行的進程。您要撥打exec(String[])而不是exec(String, String[])

您可能也想看看錯誤流 - 它可能有一個信息錯誤消息。另外,我不確定命令字符串末尾的/是否有用,甚至是有效的。您可能也不想導入org.omg.CORBA.portable.InputStream

0

你應該在一個時間發送陣列的每個值。由於無法自行提取值,因此無法將該數組作爲參數發送給bash腳本。 Process proc = Runtime.getRuntime()。exec(「/ var/www/redbutton/marsh_webreset.sh」+ array [0] +「」+ array [1] +「/」);