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

如何从Java内部运行的流程中获取bash命令退出代码?

白子明
2023-03-14
问题内容

我有一个程序是:

import java.io.*;
   import java.util.*;

   public class ExecBashCommand {
     public static void main(String args[]) throws IOException {

       if (args.length <= 0) {
         System.err.println("Need command to run");
         System.exit(-1);
       }

       Runtime runtime = Runtime.getRuntime();
       Process process = runtime.exec("./nv0914 < nv0914.challenge");
       Process process1 = runtime.exec("echo ${?}");
       InputStream is = process1.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       BufferedReader br = new BufferedReader(isr);
       String line;

       //System.out.printf("Output of running %s is:", Arrays.toString(args));

       while ((line = br.readLine()) != null) {
         System.out.println(line);
       }

     }
    }

注意:nv0914是bash可执行文件,nv0914.challenge是文本文件。当我在终端中运行任何常规命令时,如果之后使用,请检查退出代码echo ${?}。现在,我想使用一个程序来做同样的事情,但是该程序只是提供输出${?}。请帮帮我!


问题答案:

Process.waitFor()返回一个返回int退出代码的位置。如果您启动一个不相关的程序,则不会有先前的退出代码,这就是为什么它不返回任何有用信息的原因。

您不能可靠地使用exitValue(),因为您可以在程序完成之前调用它。您只应在调用waitFor()之后调用它(它会给出与waitFor()相同的退出代码)

从Javadoc获得exitValue

抛出:IllegalThreadStateException-如果此Process对象表示的子流程尚未终止。



 类似资料:
  • 问题内容: 我可以在node.js中运行bash命令,如下所示: 如何获得该命令的退出代码(在此示例中)?我试过跑步 尽管如此,无论上一个命令的退出代码如何,它总是返回0。我想念什么? 问题答案: 这两个命令在单独的shell中运行。 要获取代码,您应该能够签入回调。 如果这不起作用,则需要添加一个事件处理程序 例如

  • 问题内容: 我有一个程序,可以从我的代码成功执行cmd命令,但我希望能够从cmd命令获取输出。我怎样才能做到这一点? 到目前为止,我的代码是: Second.java: 和Main.java 我可以通过检查Second.class来检查第一个命令是否正常工作,但是如果该类产生了一些错误,我将如何看到该错误呢? 问题答案: 您需要流程的OutputStream(InputStream)(并且应该使用

  • 我有下面的课。它允许我通过java执行命令。 当我运行命令时,上一个命令的结果没有保存。例如: 给出输出: 为什么第二个“ls”命令不显示“bin”目录的内容?

  • 问题内容: 我需要从命令行程序中获取退出状态代码。不用担心,我用$?。但是对于ftp,即使它没有连接,它也会打开ftp shell,所以我无法理解连接没有建立。 尝试以下代码以了解: 有什么帮助吗?谢谢菲利波 问题答案: 您应该从ftp命令中查找成功消息,而不是查找状态。这是“ 226传输完成”。您可以在系统上使用ftp手册进行确认。 这是一个示例脚本。

  • 问题内容: 我有一个bash脚本,可以通过命令行像这样运行: 我在调用某个php文件后尝试执行上述命令。 我现在所拥有的是: 但这是行不通的。我尝试过使用和太,但剧本从来没有得到执行。 但是,当我尝试运行它时,它确实起作用,并且是所有文件的列表。 我不确定这是由于我使用的VPS的限制还是问题出在其他地方? 问题答案: 您可能需要在调用脚本之前将chdir更改到正确的目录。这样,您可以在调用shel

  • 问题内容: 我正在使用运行时从Java程序运行命令提示符命令。但是,我不知道如何获得命令返回的输出。 这是我的代码: 我尝试做,;但是没有返回任何东西。该命令的执行应返回两个数字,以分号分隔。我怎样才能在变量中打印出来? 这是我现在使用的代码: 但是我没有得到任何输出,但是当我自己运行该命令时,它可以正常工作。 问题答案: 这是要走的路: