java - 从 Java 调用 bash 脚本

标签 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 对此进行了测试,如果此信息有用的话。

如何运行脚本,尽管它位于不同的位置?

最佳答案

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

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

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

关于java - 从 Java 调用 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101443/

相关文章:

java - Quick Spring MVC 问题 : If I don't return a model, 为什么我仍然可以通过响应呈现 View ?

java - 数独 - 根据行、列、维度 (?) 和框大小查找当前框(正方形或矩形)

java - 使用 modeshape 在 JCR 存储库中递归移动节点

java - 有人知道如何将 Java 数据从谷歌应用程序引擎数据存储导出到融合表吗?

mongodb - bash中嵌套引号的问题:通过ssh在docker容器中查询的mongodump

Bash:调用函数时没有返回值

c - 字符串出现异常错误

bash - Shell 命令手动工作,不使用 Ansible

java - 使用 Java ME Embedded 8 访问 beaglebone black 上的 GPIO

ubuntu - 如何在局域网中使用 VLC 从 BeagleBone Black 板流式传输视频?