2013-02-04 32 views
0

我想从java类调用一个bash脚本。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(); 
     } 
    } 
} 

我已经得到了该脚本的所有权限,请参见下面 赛@赛的Aspire-4720Z:〜/ Jan5WS/ATCore /斌$搭配chmod 7777内存。 SH

-rwxrwxrwx 1 sai sai 77 Feb 3 20:53 Ram.sh~ 
-rwxrwxrwx 1 sai sai 79 Feb 3 20:53 Ram.sh 
[email protected]:~/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 

我全光照此异常g Ubuntu 请让我知道可能是什么问题?

回答

2

见你的错误输出 - 你试图执行"."这是一个目录,而不是你的shell脚本:

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

更换" . "exec()电话与"./"来指示当前目录,确保你的脚本有适当的家当线,如#!/bin/bash,并且它是可执行文件(你已经做了):

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

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

你要调用一个shell明确代替:

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