从Java运行bash不起作用
我有这样的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编写的程序。
- LeBarton什么是退出代码?
检查p.exitValue的输出()
它是1,这是什么意思?我该怎么办? – someone 2014-09-12 19:50:52
1.检查脚本权限(如果运行Java进程的用户具有执行权限) – TheCodingFrog 2014-09-12 19:53:59
#Chartar脚本权限是什么? – someone 2014-09-12 19:54:50
p.waitFor()
InputStreamReader inputStreamReader = new InputStreamReader(p.getErrorStream());
While (inputStreamReader.ready()) { System.out.println(inputStreamReader.read(); }
这将显示你的错误输出。将此添加到try .. catch下面的底部。
您将看到您将在命令行中看到的输出。它将帮助你缩小错误。
#LeBarton它显示了我只是一些数字 – someone 2014-09-12 20:00:11
检查退出代码。从stderr读取。有很多事情可能发生。 – 2014-09-12 19:41:46
#LeBarton什么是退出代码? – someone 2014-09-12 19:43:09
p.exitValue()。所有程序都会向操作系统返回一个整数。如果程序返回0,它正常结束。如果它不是0,则会遇到错误。 – 2014-09-12 19:45:01