【发布时间】:2012-07-03 23:42:33
【问题描述】:
这是我关于 stackoverflow 的第一个问题,所以我会尽量保持简洁和相关。
我目前正在创建一个 Java 程序,它试图调用位于系统上的外部程序,但为了做到这一点,我需要调用一个 shell 脚本来设置相关库的链接,以确保在执行外部程序之前,系统已链接到这些。
手头的问题是我无法通过 Java 调用 shell 脚本,我研究了高低并知道其他方法,例如使用 ProcessBuilder 类。不幸的是,我对尝试通过 Java 调用命令行语句的世界还很陌生,所以我一直在寻找答案。
我正在使用的代码示例如下:
private void analyse_JButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Get project path for copying of Fortran program to folder and execution
String projectPath = Newproject_GUI.getProjectPath();
String sourcePath [] = {"/bin/sh ", "-c ","source ~/set_env_WRF_gnu.sh"} ;
Runtime fortranAnalyser = Runtime.getRuntime();
try {
Process p = fortranAnalyser.exec("cp main.exe " + projectPath);
Process k = fortranAnalyser.exec(sourcePath);
BufferedReader is = new BufferedReader(new InputStreamReader(k.getInputStream()));
String line;
while ((line = is.readLine()) != null) {
System.out.println(line);
}
} catch (IOException ex) {
Logger.getLogger(Analyser_GUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
进程 p 工作正常,并且在调用该方法时确实将 main.exe 复制到预期的目录。然而,进程 k 没有,这就是问题所在。
提前致谢。
【问题讨论】:
-
尝试
"-c"而不是"-c ",因为每个空间都很重要。