2013-02-04 31 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);