【问题标题】:Calling bash script from Java从 Java 调用 bash 脚本
【发布时间】:2017-10-21 10:29:27
【问题描述】:

我有一个用于调用 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 不。我根本没有得到任何输出
  • 能不能把上面代码中的getInputStream改成getErrorStream再运行一次?希望你能得到一些有用的输出

标签: java bash beagleboneblack angstrom-linux


【解决方案1】:

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

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

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

【讨论】:

  • 子脚本除了使用绝对路径外,还可以尝试使用脚本dir,像这样:$(dirname "$0")/subscript
猜你喜欢
  • 2011-05-19
  • 2012-07-23
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2019-10-31
  • 2014-12-09
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多