java - 从 java 运行 Bash 不起作用

标签 java linux bash centos

我有这个狂欢:

#!/bin/bash
# File to be tagged
inputfile="/dfs/sina/SinaGolestanirad-Project-OneTextEachTime/SinaGolestanirad-Project/Text.txt"
#inputfile="test/SampleInputs/longParagraph.txt"
# Tagged file to be created
#outputfile="test/SampleOutputs/NERTest.conll.tagged.txt"
outputfile="/dfs/sina/SinaGolestanirad-Project-OneTextEachTime/SinaGolestanirad-Project/1.Generate-Basic-Questions/Tagged-Named-Entites-Text.txt"
# Config file
#configfile="config/conll.config"
configfile="config/ontonotes.config"
# Classpath
cpath="target/classes:target/dependency/*"
CMD="java -classpath  ${cpath} -Xmx8g edu.illinois.cs.cogcomp.LbjNer.LbjTagger.NerTagger -annotate ${inputfile} ${outputfile} ${configfile}"
echo "$0: running command '$CMD'..."
$CMD

当我运行下面的 Java 代码时,它们不会给出任何错误,但它们只是在我的 Eclipse 控制台中显示 bash 文件,换句话说,它们不运行 bash! process.exitValue() 的值为 1,顺便说一下,我的操作系统是 CentOS,linux。

第一个JAVA代码:

try {
     Process process = new ProcessBuilder(command).start();
     process.waitFor();
     System.out.println(process.exitValue());
        BufferedReader buf = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = "";
        while ((line = buf.readLine()) != null) {
            System.out.println("exec response: " + line);
        }
    } catch (Exception e) {
        System.out.println(e);
    }

第二个JAVA代码:

    String command = "/dfs/sina/SinaGolestanirad-Project-OneTextEachTime/"
            + "SinaGolestanirad-Project/1.Generate-Basic-Questions/1.IllinoisNerExtended-DO-NOT-OPEN-BY-ECLIPSE/plaintextannotate-linux.sh";
     StringBuffer output = new StringBuffer();

    Process p;
    try {
        String[] cmd = new String[]{"/bin/bash",command};
        p = Runtime.getRuntime().exec(cmd);

        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                p.getInputStream()));

        String line = "";
        while ((line = reader.readLine()) != null) {
            output.append(line + "\n");
        }
        System.out.println(output.toString());

    } catch (Exception e) {
        e.printStackTrace();
    }

我还检查了 bash 文件权限,它可以作为程序执行。

如何运行 bash 文件? bash 应该运行另一个用 java 编写的程序。

最佳答案

-- LeBarton 退出代码是什么?

检查 p.exitValue() 的输出

关于java - 从 java 运行 Bash 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815633/

相关文章:

java - Gradle Spring-data-dynamo 数据库

Linux 交换内存超出可用空间

c++ - 使用 C++ 获取 Linux 内核模块的详细信息

bash - 在 Ubuntu BASH 中按字母顺序复制文件夹中的文件

macos - 是否可以还原已编译的 shell 代码?

java - 从父类(super class)创建子类

java - Android - 自定义 AlertDialog 背景颜色

linux - 有效文件的 Shell 脚本语法错误

bash - Makefile 不提示编译器使用优化标志

java - 无法传递参数apache shiro jsp servlet