[英]Running a bash shell script in java
我想從我的程序運行一個shell腳本,但它似乎沒有做任何事情。 我在linux終端直接運行相同的命令,它工作正常,所以我猜它是我的java代碼。 正如您所看到的,我首先使用PrintWriter將命令寫入shell腳本,但我希望這不會影響shell腳本本身的運行。 任何幫助,將不勝感激!
public static void main(String[] args) {
// TODO Auto-generated method stub
String nfdump = "nfdump -o csv -r /home/shane/Documents/nfdump/nfcapd.201211211526>blank.txt";
try {
FileWriter fw = new FileWriter("/home/shane/Documents/script.sh");
PrintWriter pw = new PrintWriter(fw);
pw.println("#!/bin/bash");
pw.println(nfdump);
pw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Process proc = null;
try {
proc = Runtime.getRuntime().exec("sh /home/shane/Documents/script.sh");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您應該使用返回的Process
來獲取結果。
Runtime#exec
作為單獨的進程執行命令,並返回Process
類型的對象。 您應該調用Process#waitFor
以便程序等待新進程完成。 然后,您可以在返回的Process
對象上調用Process.html#getOutputStream()
以檢查已執行命令的輸出。
創建流程的另一種方法是使用ProcessBuilder
。
Process p = new ProcessBuilder("myCommand", "myArg").start();
使用ProcessBuilder
,您可以將命令的參數列為單獨的參數。
請參閱ProcessBuilder和Runtime.exec()以及ProcessBuilder與Runtime.exec()之間的區別,以了解有關Runtime#exec
和ProcessBuilder#start
之間差異的更多信息。
試試這個,它會起作用。
String[] cmd = new String[]{"/bin/sh", "path/to/script.sh"};
Process pr = Runtime.getRuntime().exec(cmd);
從Java執行腳本時,它會生成一個未設置PATH環境變量的新shell。
使用以下代碼設置PATH env變量應該運行您的腳本。
String[] env = {"PATH=/bin:/usr/bin/"};
String cmd = "you complete shell command"; //e.g test.sh -dparam1 -oout.txt
Process process = Runtime.getRuntime().exec(cmd, env);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.