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