【问题标题】:Running .sh from Java code从 Java 代码运行 .sh
【发布时间】:2015-06-27 12:33:27
【问题描述】:

我试图从我的 java 代码中运行 .sh 文件。我见过类似的问题 (How to run Unix shell script from Java code?) 并尝试了那里写的答案。但是,我希望进程退出值将是 0(正常终止),而实际上我得到了 127。这是我的代码:

public int performATRs() throws IOException{

    String[] command = {"sh", "/ThematicAnalysis/flexiTerm/FlexiTerm.sh"};
    Process process = Runtime.getRuntime().exec(command);
    InputStream inputStream = process.getInputStream();
    InputStreamReader streamReader = new InputStreamReader(inputStream);
    BufferedReader bufReader = new BufferedReader(streamReader);
    try{
        process.waitFor();
        System.out.println("Waiting...");
        System.out.println("Returned Value :" + process.exitValue());
    }catch(InterruptedException e){
        System.out.println(e.getMessage());
    }
    while(bufReader.ready())
        System.out.println(bufReader.readLine());
    return process.exitValue();
} 

我尝试从我的 java 代码中运行 FlexiTerm.sh。当我从终端运行它时它可以工作。非常感谢您的帮助:)

【问题讨论】:

  • 不工作是什么意思?没有输出还是有任何异常?
  • 感谢您的回复。当我尝试返回 process.exitValue() 时,我得到 1 而不是 0(正常终止)@my-thoughts
  • 您在这段代码中只使用了一个线程,然后在您的进程能够将任何信息传回给您之前,通过调用waitFor() 来阻塞这个单线程。考虑 1) 为错误流和输入流获取 BufferedReader,在它们自己的线程中在调用waitFor()之前开始读取流。跨度>
  • 恐怕我不太明白你的意思。你能给我举个例子吗?欢呼
  • 什么你不明白如何创建一个新线程?与其问我们任何人的一项重大任务,不如在您的问题中非常具体。您肯定已经查找过此类事情的示例,并且已经看到用于执行此操作的线程,对吗?再次,请澄清您对此感到困惑的地方。

标签: java shell unix


【解决方案1】:

127 表示它无法执行/ThematicAnalysis/flexiTerm/FlexiTerm.sh,您应该仔细检查该脚本的路径是否正确。我怀疑不是,因为 Unix 风格的系统通常不会有一个名为“ThematicAnalysis”的顶级目录。如果您要在相对于 Java 程序工作目录的位置查找该脚本,则应删除前导正斜杠。

【讨论】:

    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 2015-07-29
    • 2013-12-05
    • 2013-06-23
    • 1970-01-01
    • 2023-03-10
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多