【问题标题】:How to run a .sh file from Java? [duplicate]如何从 Java 运行 .sh 文件? [复制]
【发布时间】:2013-03-03 22:21:59
【问题描述】:

我需要在不传递任何参数的情况下从我的 Java 代码运行 .sh 文件。我已经尝试过使用

Runtime.getRuntime().exec("src/lexparser.sh");

ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh");
Process p = pb.start();

上述两种方法均无效。有没有其他方法可以从 Java 运行 .sh 文件?

【问题讨论】:

标签: java shell


【解决方案1】:

有两件事很容易错过:

  1. 路径和 CWD。确保找到可执行文件的最简单方法是提供它的绝对路径,例如/usr/local/bin/lexparser.sh

  2. 处理输出。您需要阅读过程输出。输出被缓冲,如果输出缓冲区已满,生成的进程将挂起。

【讨论】:

  • 我将 .sh 文件保存在我的项目文件夹中。我的 .sh 文件应该读取一个文件并更新另一个文件的内容。当我直接从终端而不是从 java 文件中运行它时,它是工作文件
  • +1 用于路径问题。我相信有一个 exec() 方法可以将工作目录作为最后一个参数(如果不适用,我认为你可以取消其余的)
  • @user2111009 我已经很久没有从 Java 生成进程了,所以我无法提供比我已经提供的更具体的信息。尝试从脚本内部显式设置 CWD(使用 cd)。
【解决方案2】:
ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh", "myArg1", "myArg2");
 Process p = pb.start();
 BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
 String line = null;
 while ((line = reader.readLine()) != null)
 {
    System.out.println(line);
 }

【讨论】:

  • 你在哪里使用Process p;
  • 启动 processbuilder
  • 我的意思是你在后面的代码中在哪里使用p 引用变量?
  • 我已更改代码.plz检查
  • 好的。我得到了你的更正。
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2018-08-10
  • 2013-06-05
相关资源
最近更新 更多