2017-05-21 5 views
1

ich diesen MCVE für eine Java-Klasse haben ein Bash-Skript aufrufen:Aufruf Bash-Skript von Java

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

class Test 
{ 
     static BufferedReader in; 
     public static void main(String[] args) throws Exception 
     { 
       String[] cmd = new String[]{"/bin/sh", "/usr/myapp/myscript.sh", "parameter1"}; 
       Process pr = Runtime.getRuntime().exec(cmd); 
       in = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
       String line = in.readLine(); 
       while(line != null) 
       { 
         System.out.println(line); 
         line = in.readLine(); 
       } 

     } 
} 

Wenn ich die kompilierte .class-Datei im selben Verzeichnis wie myscript.sh haben, funktioniert es ganz gut. Sobald ich die .class-Datei in einen anderen Ordner verschiebe, wird das Skript nicht mehr ausgeführt, obwohl ich immer noch den absoluten Pfad zum Skript verwende.

Ich testete dies mit JDK 1.8 auf einem BeagleboneBlack laufenden Angstrom, wenn diese Information für etwas gut ist.

Wie kann ich das Skript ausführen, obwohl es an einem anderen Ort ist?

+0

Do nicht derjenige des gerufenen Skript aber das eines der aufrufenden Anwendung (der Java-App in meinem Fall) ist Sie erhalten eine Ausnahme, wenn das Skript nicht ausgeführt wird? – Samuel

+0

@ Samuel Nö. Ich bekomme einfach keine Ausgabe – mxcd

+2

Kannst du 'getInputStream' in' getErrorStream' im obigen Code ändern und es erneut ausführen? Hoffentlich erhalten Sie eine nützliche Ausgabe – Samuel

Antwort

1

Die Verwendung der getErrorStream Hinweis von Samuel hat wirklich geholfen.

Es war klar, dass einige Unterskripts, die sich im selben Ordner wie das ursprüngliche Shellskript befanden, nicht gefunden wurden.

Die Lösung war so einfach wie auch absolute Pfade zu Teilscripts verwenden, da das Arbeitsverzeichnis

+1

Neben absoluten Pfaden für Subskripte können Sie auch das Skript * dir * verwenden, wie folgt: '$ (dirname" $ ​​0 ")/tiefgestellt. –