2

我正在尝试从 java 类调用 bash 脚本。

这是我的java程序

import java.io.File;

public class RunBuild {
    public static void main(String[] args) {
        File wd = new File("/home/sai/Jan5WS/ATCore/bin/");
        System.out.println("Working Directory: " + wd);
        Process proc = null;
        try {
            proc = Runtime.getRuntime().exec(" . Ram.sh", null, wd);
            System.out.println(proc.getInputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我已获得该脚本的所有权限,请参见下文 sai@sai-Aspire-4720Z:~/Jan5WS/ATCore/bin$ chmod 7777 Ram.sh

-rwxrwxrwx 1 sai sai    77 Feb  3 20:53 Ram.sh~
-rwxrwxrwx 1 sai sai    79 Feb  3 20:53 Ram.sh
sai@sai-Aspire-4720Z:~/Jan5WS/ATCore/bin$

它在下面抛出这个异常

Working Directory: /home/sai/Jan5WS/ATCore/bin
java.io.IOException: Cannot run program "." (in directory
"/home/sai/Jan5WS/ATCore/bin"): error=13, Permission denied
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at RunBuild.main(RunBuild.java:12)
Caused by: java.io.IOException: error=13, Permission denied
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 4 more

我正在使用 Ubuntu 请让我知道可能是什么问题?

4

2 回答 2

3

查看您的错误输出 - 您正在尝试执行"."哪个目录,而不是您的 shell 脚本:

java.io.IOException: Cannot run program "."

" . "exec()调用中的替换为"./"以指示当前目录,确保您的脚本具有正确的 shebang 行,例如#!/bin/bash,并且它是可执行的(您已经这样做了):

proc = Runtime.getRuntime().exec("./Ram.sh", null, wd);
于 2013-02-04T10:26:17.807 回答
0

虽然我不知道exec函数调用在 Java 中是如何工作的,但我真的怀疑它会运行 shell 并接受 shell 命令。您要执行的命令是.该命令的内部 BASH 别名source

您必须改为显式调用 shell:

proc = Runtime.getRuntime().exec("/bin/bash -c Ram.sh", null, wd);
于 2013-02-04T10:27:44.687 回答