Java调用bash脚本: Permission Denied Error

标签 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 请让我知道可能是什么问题?

最佳答案

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

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

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

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

关于Java调用bash脚本: Permission Denied Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14684713/

相关文章:

linux - 无法在 Azure 上的 Ubuntu 16.04 上连接 Percona Docker 镜像

linux - 将链接复制到多个子文件夹

java - 加载 FXML 时将参数传递给 Controller

java - 使用 Hibernate SQLQuery 返回 Postgres UUID

linux - AWK 输出到数组

bash 脚本每 60 秒捕获一次平均负载 2 小时

linux - 如何设置crontab每1小时1分钟一次

java - 在 For 循环中使用计数器?

java - 将 ArrayList 元素向右移动

linux - 如何在 Windows 主机上的 Vagrant 中以区分大小写的方式处理文件