我有一个用于调用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对此进行了测试,如果这些信息对某些内容有用的话。
如何运行脚本,虽然它位于不同的位置?
答案 0 :(得分:1)
使用Samuel的getErrorStream
提示确实有帮助。
很明显,找不到与原始shell脚本位于同一文件夹中的一些子脚本。
解决方案就像使用子脚本的绝对路径一样简单,因为工作目录不是被调用脚本之一,而是调用应用程序之一(在我的例子中是Java App)