从Java调用bash脚本

时间:2017-05-21 20:25:08

标签: java bash beagleboneblack angstrom-linux

我有一个用于调用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对此进行了测试,如果这些信息对某些内容有用的话。

如何运行脚本,虽然它位于不同的位置?

1 个答案:

答案 0 :(得分:1)

使用Samuel的getErrorStream提示确实有帮助。

很明显,找不到与原始shell脚本位于同一文件夹中的一些子脚本。

解决方案就像使用子脚本的绝对路径一样简单,因为工作目录不是被调用脚本之一,而是调用应用程序之一(在我的例子中是Java App)