我需要使用bash
启动一个服务器,所以我创建了一个UNIX shell,但是我无法用Eclipse中的Java执行它。
我尝试了以下不起作用的代码:
Process proc = Runtime.getRuntime().exec(./startServer);
以下是startServer
文件的内容:
#!/bin/bash
cd /Users/sujitsoni/Documents/bet/client
npm start
答案 0 :(得分:2)
您可以尝试以下两个选项。
选项1
Process proc = Runtime.getRuntime().exec("/bin/bash", "-c", "<Abosulte Path>/startServer");
选项2
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "<Absolute Path>/startServer");
pb.directory(new File("<Absolute Path>"));
Process proc = pb.start();
答案 1 :(得分:2)
有些事情可能会出错:
你给出的文件的路径可能是错误的,它可能需要relative path,但是从命令行开始,它将采用绝对路径。
错误= 13,权限被拒绝 - 如果脚本文件没有所需权限。在您的方案中,可能不是这种情况,因为您没有收到任何错误。
最后,您正在通过java程序执行脚本,因此不会打印出脚本的输出。在您的方案中,可能就是这种情况。您需要从BufferedReade捕获脚本的输出并打印它。 (在您的情况下,服务器可能已启动,但您没有看到脚本的日志/输出。 有关打印输出,请参阅下面的代码示例。
public static void main(String[] args) throws IOException, InterruptedException {
Process proc = Runtime.getRuntime().exec("./startServer");
proc.waitFor();
StringBuffer output = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
System.out.println(output);
}