我有一个用于调用 bash 脚本的 Java 类的 MCVE:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Test
{
static BufferedReader in;
public static void main(String[] args) throws Exception
{
String[] cmd = new String[]{"/bin/sh", "/usr/myapp/myscript.sh", "parameter1"};
Process pr = Runtime.getRuntime().exec(cmd);
in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = in.readLine();
while(line != null)
{
System.out.println(line);
line = in.readLine();
}
}
}
当我将编译后的 .class 文件与 myscript.sh 放在同一目录中时,它工作得很好。 一旦我将 .class 文件移动到另一个文件夹,它就不再执行脚本,尽管我仍然使用脚本的绝对路径。
我在运行 Angstrom 的 BeagleboneBlack 上使用 JDK 1.8 对此进行了测试,如果此信息有用的话。
如何运行脚本,尽管它位于不同的位置?
最佳答案
使用 Samuel 的 getErrorStream
提示确实很有帮助。
很明显,没有找到与原始 shell 脚本位于同一文件夹中的一些子脚本。
解决方案就像使用子脚本的绝对路径一样简单,因为工作目录不是被调用脚本的目录,而是调用应用程序的目录(在我的例子中是 Java 应用程序)
关于java - 从 Java 调用 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101443/