簡體   English   中英

在java中運行bash shell腳本

[英]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#execProcessBuilder#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM