【问题标题】:Is there a way to execute multiple Linux commands in Java process builder?有没有办法在 Java 进程构建器中执行多个 Linux 命令?
【发布时间】:2021-10-20 00:27:00
【问题描述】:

我对 Java 还是很陌生,目前正在努力用 Java 执行 linux 命令。

在单个进程中,我想执行一个touch txt命令,让进程生成器等待一秒钟然后在同一个进程中,删除txt文件。

我目前的代码如下

public void Shell(){
try {
  File dir = new File("/Users/yhlee/Documents");
  ProcessBuilder pb = new ProcessBuilder(new String[]{"/bin/bash", "-c", "touch commandTest.txt"});
  pb.directory(dir);
  Process start = pb.start();
  log.info("shell succeeded");

}catch (Exception e){
  e.printStackTrace();
  log.info("Error.Running.CMD");
}

我在编写 txt 文件之后被卡住了,任何形式的建议都会非常感谢!

【问题讨论】:

  • 您可以随时change the ProcessBuilder’s command 并从中创建另一个进程。
  • 为此使用 ProcessBuilder 会使代码变得缓慢且脆弱,但如果您仍然想要,可以将 "touch commandTest.txt" 替换为 "touch commandTest.txt; sleep 1; rm commandTest.txt"
  • @thatotherguy 非常感谢您的方法似乎有效。您是否有机会知道如何根据函数的输入值使 ProcessBuilder 输出一个 txt 文件。例如,如果它是 public void Shell(String fileName) 并且 ProcessBuilder 写入和删除 fileName.txt 而不是 commandTest.txt。
  • @Adam 您可以将文件名作为单独的参数传递,并在 shell 命令中使用 "$1" 来引用它。例如,new String[]{"/bin/bash", "-c", "touch \"$1\"; ...", "_", fileName + ".txt"}
  • @thatotherguy 非常感谢!!你是最棒的!!

标签: java linux processbuilder


【解决方案1】:

我建议您避免创建 shell 来执行您的操作。我还希望使用系统属性user.home 来构造Documents 文件夹的路径。除非我遗漏了什么,否则你只是想要

File f = new File(System.getProperty("user.home"), "Documents/commandTest.txt");
try {
    f.createNewFile();
    TimeUnit.SECONDS.sleep(1);
} catch (Exception e) {
    e.printStackTrace();
}
f.deleteOnExit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2013-01-27
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多