2014-09-12 59 views
-1

我有这样的bash:从Java运行bash不起作用

#!/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的文件,换句话说他们不跑巴斯! 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编写的程序。

+0

检查退出代码。从stderr读取。有很多事情可能发生。 – 2014-09-12 19:41:46

+0

#LeBarton什么是退出代码? – someone 2014-09-12 19:43:09

+0

p.exitValue()。所有程序都会向操作系统返回一个整数。如果程序返回0,它正常结束。如果它不是0,则会遇到错误。 – 2014-09-12 19:45:01

回答

0

- LeBarton什么是退出代码?

检查p.exitValue的输出()

+0

它是1,这是什么意思?我该怎么办? – someone 2014-09-12 19:50:52

+0

1.检查脚本权限(如果运行Java进程的用户具有执行权限) – TheCodingFrog 2014-09-12 19:53:59

+0

#Chartar脚本权限是什么? – someone 2014-09-12 19:54:50

0
p.waitFor() 

InputStreamReader inputStreamReader = new InputStreamReader(p.getErrorStream()); 

While (inputStreamReader.ready()) { System.out.println(inputStreamReader.read(); } 

这将显示你的错误输出。将此添加到try .. catch下面的底部。

您将看到您将在命令行中看到的输出。它将帮助你缩小错误。

+0

#LeBarton它显示了我只是一些数字 – someone 2014-09-12 20:00:11