当前位置: 首页 > 面试题库 >

在Java中运行bash shell脚本

谈禄
2023-03-14
问题内容

我想从下面的程序中运行一个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.html#getOutputStream()在返回的Process对象上调用以检查已执行命令的输出。

创建过程的另一种方法是使用ProcessBuilder

Process p = new ProcessBuilder("myCommand", "myArg").start();

使用ProcessBuilder,可以将命令的参数列为单独的参数。

见的ProcessBuilder和的Runtime.exec()之间的区别和的ProcessBuilder
VS的Runtime.exec()
更多地了解之间的差异Runtime#execProcessBuilder#start



 类似资料:
  • 问题内容: 我有一个普通的脚本,我想在Java中执行它。有人可以为我提供更多有关如何实现此目的的文档/示例吗? 问题答案: 基本的Java + Groovy集成: 请参阅本文以获取更多从Java调用Groovy的方法 PS: 您需要包括如在Java程序中,例如:

  • 问题内容: 我正在尝试抓取一个按如下方式工作的特定网页。 首先加载页面,然后运行某种javascript来获取填充页面所需的数据。我对这些数据感兴趣。 如果我使用HtmlAgilityPack获取页面-该脚本不会运行,那么我得到的基本上是空白页面。 有没有一种方法可以强制它运行脚本,以便我可以获取数据? 问题答案: 您将获得服务器返回的内容-与Web浏览器相同。然后,Web浏览器将运行脚本。HTM

  • 问题内容: 我正在尝试在Dockerfile的构建过程中运行脚本。但这似乎不起作用。 我尝试过这种方式: 也这样: 并且也执行我正在运行的容器: 似乎没有任何作用。 你知道怎么做吗? 问题答案: 和是执行脚本的两种不同方式。 意味着它将创建一个中间容器,运行脚本并将该容器的新状态冻结在新的中间映像中。此后该脚本将不再运行:您的最终图像应该反映出该脚本的结果。 表示您的映像(尚未执行脚本)将创建一个

  • 问题内容: 我有一个C ++程序,需要从PHP脚本中获取数据,对其进行处理,然后将数据返回给我的PHP脚本。 如何将值从PHP传递到C ++? 您如何运行C ++脚本?您必须先对其进行一些编译吗? 您如何从C ++脚本中获取值? 问题答案: 1。 如何将值从PHP传递到C ++? 回答: 在php文件中,您可以使用 exec 函数来执行C ++二进制文件。例: 2。 您如何运行C ++脚本?您必须

  • 我在尝试从Java运行R脚本时遇到了一个问题。我真的在互联网上寻找这个问题的答案,但什么都不管用。 求你帮帮我 这是java代码 以下是当我添加Runtime.getRuntime(). exec("Rcript"rScriptFileName)时抛出的错误消息:

  • 问题内容: 我是猪脚本,Hadoop,Hbase的新手。这是我需要知道的。我想运行一个Pig脚本,我不想在我的Java程序中嵌入该Pig脚本,并希望通过传递必要的Pig脚本和参数(可能是参数文件)的任何Pig Execution方法来运行它。核心Pig库或任何其他库是否提供了执行Pig脚本的方式。我已经尝试过使用Java运行时exec方法,我用空格分隔的字符串传递了一些参数,所以我放弃了通过运行时