从 java 代码执行 shell 脚本并将终端的输出附加到 .txt 文件
Executing shell scripts from java code and append the terminal's output to a .txt file
我希望我的代码实现的是调用可用的两个 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==1
或 i==2
执行一个或另一个,但没有成功。
为什么我无法使第二个脚本工作,即使它与第一个相同?
我的脚本代码
#!/bin/sh
cd "$(dirname "[=13=]")"
echo Hello World >> output.txt
exit
您可能需要按顺序 运行 处理,即在 运行 下一个处理之前等待处理完成。这主要是因为它们附加到同一个文件。要让进程完成,您必须消耗它的所有输出流。 This article 更详细地解释了此事。
我希望我的代码实现的是调用可用的两个 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==1
或 i==2
执行一个或另一个,但没有成功。
为什么我无法使第二个脚本工作,即使它与第一个相同?
我的脚本代码
#!/bin/sh
cd "$(dirname "[=13=]")"
echo Hello World >> output.txt
exit
您可能需要按顺序 运行 处理,即在 运行 下一个处理之前等待处理完成。这主要是因为它们附加到同一个文件。要让进程完成,您必须消耗它的所有输出流。 This article 更详细地解释了此事。