在Mac上使用Java运行exec文件

时间:2017-01-09 10:28:29

标签: java npm

我需要使用bash启动一个服务器,所以我创建了一个UNIX shell,但是我无法用Eclipse中的Java执行它。

我尝试了以下不起作用的代码:

Process proc = Runtime.getRuntime().exec(./startServer);

以下是startServer文件的内容:

#!/bin/bash
cd /Users/sujitsoni/Documents/bet/client
npm start

2 个答案:

答案 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);
    
    }