【问题标题】:Running a bash command from within a Java program从 Java 程序中运行 bash 命令
【发布时间】:2021-07-31 23:26:19
【问题描述】:

考虑一段Java代码:

import java.io.IOException;
public class Demo{
          public static void main(String []args) throws IOException{
                   ...
                   String abc="i am here";
                   System.out.println(abc);
 }

}

我想运行 - echo "THIS IS STUFF FOR THE FILE" >> file1.txt - 在 System.out.println() 行之后立即运行,假设 file1.txt 在同一目录中。

【问题讨论】:

  • 到目前为止你尝试过什么?
  • 你为什么要这样做? bash 为您提供了 Java IO 没有的什么?
  • 使用stackoverflow.com/questions/8496494/… 中看到的运行时可能是答案。
  • 我试着做 command.add()。但它似乎没有用。多年前我上一次从事 Java 工作,我不得不间歇性地浏览 Java 源代码。目前,我可以使用 bash 更好地完成某些小事情。

标签: java bash


【解决方案1】:

ProcessBuilder 类是更现代的版本。

import static java.lang.ProcessBuilder.Redirect.appendTo;

ProcessBuilder pb = new ProcessBuilder("/bin/echo", "THIS IS STUFF FOR THE FILE");
pb.redirectOutput(appendTo(new File("file1.txt")));
Process p = pb.start();

请注意,这会直接调用/bin/echo,而不是让bash 浏览PATH。这更安全,因为没有机会被黑客入侵echo。另外,由于这不使用bash,Java 用于重定向输出。

【讨论】:

  • 非常感谢,埃里克。这看起来很临床。我会尝试一下并尽快回复您。
  • 回复:“而不是让bash 浏览PATH”,“一个被黑的echo”:echo 实际上是内置在 Bash 中的,所以这些都不是问题。实际上,有人可能会争辩说,使用 Bash 内置函数比使用 /bin/echo 更安全,因为前者在每个使用 Bash 的系统上的行为方式都相同,而后者的行为则更加多变。 (当然,前者取决于 Bash 的存在,而后者则不然。)
  • 我没有意识到echo 是内置在bash 中的。总的来说,我对 shell 脚本有点偏执。
【解决方案2】:

像这样使用 Runtime.getRuntime().exec() 命令:

Runtime.getRuntime().exec("echo 'THIS IS STUFF FOR THE FILE!' > file1.txt");

文档可以阅读here。

如果它不起作用或者您发现该命令很方便并想了解更多信息,请帮自己一个忙并阅读this。它会为您节省汗水。

【讨论】:

  • 谢谢,卡森。我会调查的。
猜你喜欢
  • 2012-04-10
  • 1970-01-01
  • 2021-04-08
  • 2011-04-11
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多