2014-06-30 62 views
0

我從Java代碼中使用調用shell腳本:如何使用java將參數傳遞給shellscript?

ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh "); 
Process script_exec = pb2.start(); 

成功地運行,但我需要一些參數傳遞給它的,所以我需要執行該腳本:

param1=abc param2=xyz /home/abhijeet/sample1.sh 

我曾嘗試這樣的代碼:

ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh ","param1=abc","param2="xyz"); 

但我以前不爲me.How工作我可以通過arguements同時使用的ProcessBuilder調用它shell腳本?

注意:我的問題是關於將參數傳遞給shellscript,而不是命令。我已經閱讀,提出了可能的重複問題,但這並不解決我的問題,我嘗試了這種方式,即將參數傳遞給命令,而不是shell腳本

+0

您是否嘗試過明顯的:'的ProcessBuilder PB2 =新的ProcessBuilder( 「/家/ abhijeet/sample1.sh參數1 = ABC參數2 = XYZ」);'? – Smutje

+0

[ProcessBuilder和Runtime.exec()之間的差異的可能的重複)(http://stackoverflow.com/questions/6856028/difference-between-processbuilder-and-runtime-exec) – Reinard

+0

@SirTroll:我讀過,但這不會解決我的問題,我嘗試了這種方式,這是爲了傳遞參數,而不是shellcript –

回答

4

你說你需要運行命令:

param1=abc param2=xyz /home/abhijeet/sample1.sh 

在這種情況下,「參數1」和「參數2」字符串不是命令行參數。這是shell語法來設置兩個環境變量param1param2然後調用sample1.sh

要使用ProcessBuilder做到這一點,你需要訪問製造商的環境變量:

ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh"); 
pb2.environment().put("param1", "abc"); 
pb2.environment().put("param2", "xyz"); 
Process script_exec = pb2.start(); 

作爲替代方案,那你要運行該命令使用shell語法,所以你可以把它作爲一個shell來執行它:

ProcessBuilder pb2=new ProcessBuilder(
    "/bin/sh", 
    "-c", 
    "param1=abc param2=xyz /home/abhijeet/sample1.sh"); 
Process script_exec = pb2.start();