Java调用bash脚本:权限被拒绝错误

时间:2013-02-04 10:23:41

标签: java linux unix

我正在尝试从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 请让我知道可能是什么问题??

2 个答案:

答案 0 :(得分:3)

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

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

" . "来电中的exec()替换为"./"以指示当前目录,确保您的脚本具有正确的shebang行,例如#!/bin/bash,以及它是可执行的(你已经做过):

proc = Runtime.getRuntime().exec("./Ram.sh", null, wd);

答案 1 :(得分:0)

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

你必须明确地调用一个shell:

proc = Runtime.getRuntime().exec("/bin/bash -c Ram.sh", null, wd);