【问题标题】:Executing shell scripts from java code and append the terminal's output to a .txt file从 java 代码执行 shell 脚本并将终端的输出附加到 .txt 文件
【发布时间】:2018-06-05 11:44:00
【问题描述】:

我希望我的代码实现的是调用可用的两个 shell 脚本之一并执行一些命令,其输出将打印在 .txt 文件中。

到目前为止,我已经设法实现了这一点(通过调用第一个脚本),但是当我尝试调用第二个脚本时,终端没有打开,并且命令的输出没有附加到 .txt 文件中。

我的代码如下:

File file = new File("res/script1.sh");
String absolutePath = file.getAbsolutePath();

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("open -a Terminal "+absolutePath);

执行此操作后,.txt 文件包含短语“Hello World”。

我的第一次尝试是将/script1.sh 更改为/script2.sh,因为我认为第二次尝试会在.txt 文件的第二行中附加另一个“Hellow World”。这不起作用,因为文件的内容保持不变,与第一种情况相反,终端甚至没有打开。

我还尝试复制两个脚本的代码,并根据输入值 i==1i==2 执行其中一个,但没有成功。

任何想法为什么我不能使第二个脚本工作,即使它与第一个相同?

我的脚本代码

#!/bin/sh
cd "$(dirname "$0")"
echo Hello World >> output.txt
exit

【问题讨论】:

  • 为什么要打开终端并运行脚本,而不是简单地在子进程中运行脚本?
  • 我是 shell 脚本的新手,所以我认为这是正确的方法。我的首要任务是运行命​​令并接收它的输出。如您所说,这可以以更“适当”的方式实现吗?
  • 贴出所有代码。
  • 如果shell脚本有适当的shebang,在子进程中运行脚本。它会起作用的。
  • 我还添加了我的脚本代码。

标签: java bash shell absolute-path


【解决方案1】:

您可能需要按顺序运行进程,即在运行下一个进程之前等待进程完成。这主要是因为它们附加到同一个文件。要让该过程完成,您必须使用其所有输出流。 This article 更详细地解释了此事。

【讨论】:

  • 这些都是很好的例子,尽管我自己没有测试过它们是否有效。我最后做的是切换到使用 ProcessBuilder 类,一切正常。如果对我的第一种方法是否也能成功感兴趣,请告诉我,我会试一试。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
  • 2014-03-24
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多