2013-02-04 4 views
0

J'essaye d'appeler un script bash d'une classe java.Java appelant script bash: Autorisation refusée Erreur

Ceci est mon programme 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(); 
     } 
    } 
} 

J'ai toutes les autorisations pour ce script, s'il vous plaît voir ci-dessous 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 
[email protected]:~/Jan5WS/ATCore/bin$ 

Son déclenchement de cette exception ci-dessous

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 

J'usin g Ubuntu S'il vous plaît laissez-moi savoir ce qui pourrait être le problème ??

Répondre

2

Voir votre sortie d'erreur - que vous essayez d'exécuter "." qui est un répertoire, pas votre script shell:

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

Remplacer le " . " dans votre exec() appel avec "./" pour indiquer le répertoire courant, assurez-vous que votre script a la ligne de tralala appropriée, comme #!/bin/bash, et qu'il est exécutable (que vous avez déjà fait):

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

Bien que je ne sais pas comment le exec appel de fonction fonctionne en Java, je doute vraiment qu'il va exécuter un shell et accepter les commandes du shell. Et la commande que vous voulez exécuter est . qui est un alias interne BASH pour la commande source.

Vous devez appeler le shell explicitement à la place:

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