我想從java運行時調用perl腳本。它好工作對我的Windows7的筆記本電腦用下面的代碼,Runtime.getRuntime()。exec奇怪的行爲
try {
String cmdString= "c:\\perl64\\bin\\perl.exe c:\\perl64\\eg\\userinput.pl \""+arg1+"\" \""+arg2+"\"";
Process p = Runtime.getRuntime().exec(cmdString);
} catch(IOException e) {
System.out.println(e);
}
perl腳本運行和生產什麼我希望(更新數據庫)。
當我將整個事情轉移到遠程CentOS服務器時,它不再工作。該腳本是相同的,並且Java代碼,
try {
String cmdString= "/opt/lampp/bin/perl /home/support/scripts/userinput.pl \""+arg1+"\" \""+arg2+"\" > /tmp/userinput.log";
log(cmdString);
Process p = Runtime.getRuntime().exec(cmdString);
} catch(IOException e) {
System.out.println(e);
}
我加了重定向/tmp/userinput.log後,我看到劇本是行不通的。但是根本沒有創建日誌文件。我還添加了日誌以確保java代碼的這部分確實得到執行,而且確實如此。我也嘗試在comString前添加「/ bin/bash」,並沒有什麼區別。但是,當我從命令行直接在遠程服務器上運行cmdString時,它可以正常工作。
現在,當我將cmdString更改爲「touch /tmp/userinput.log」時,它確實會創建空白日誌文件。
所以我知道運行了Runtime.getRuntime().exec(cmdString)命令,並且cmdString在命令行輸入時工作,並且一個簡單的「touch」命令可以用於此設置。但是我完全失去了爲什麼調用perl腳本的實際cmdString不起作用,並且沒有任何信息告訴我什麼是錯誤的。
有人可以幫忙嗎?
shell重定向不起作用使我偏離課程。實際上perl腳本被調用了。它不會因爲參數的雙引號而運行。它的行爲與在Windows上不同。你的建議是對的錢。謝謝。 – user1277061