Shell Script ausführen

Diskutiere Shell Script ausführen im Java Basics - Anfänger-Themen Bereich.
F

freehawk

Hallo zusammen,

ich habe folgenden Code:
Code:
try 
{
    debug.print( 2, "Compile antriggern" );
                                                
    //Process proc = Runtime.getRuntime().exec( verzeichnis + "/compile.sh" );
    Process proc = Runtime.getRuntime().exec( "./compile.sh" );
                                                                                
    BufferedReader in = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
                                    
    while( ( verzeichnis = in.readLine() ) != null )
    {
                                                                    
        debug.print( 3, verzeichnis );    
                                            
    }
    proc = null;
    in = null;    
}
catch( IOException e )
{
    debug.print( 1, "Fehler auf der Konsole: " + e.getMessage() );
}
catch( Exception e )
{
    debug.print( 1, "Fehler auf der Konsole: " + e.getMessage() );
}
Wenn ich ihn ausführe, dann wir das Shell Script ausgeführt, die Befehle darin werden offensichtlich ausgeführt, da dadurch Dateien erzeugt werden. Was ich allerdings mit dem Reader nicht auffangen kann ist die Ausgabe von dem Shell Script. Scheinbar kann readLine keine Zeilen lesen.

In dem Shell Script ist ein "echo" Befehl, sprich mindestens eine Zeile sollte eingelesen werden können. Eine Exception wird auch nicht ausgegeben.

Habt ihr eine Idee?

Danke

Gruß
Markus
 
mihe7

mihe7

Probier mal
Process proc = Runtime.getRuntime().exec( "bash ./compile.sh" );
 
F

freehawk

so nun konnte ich das auch mal testen.

Leider bringt das bash auch keine andere Ausgabe. Ich sehe dass der Befehl ausgeführt wurde aber leider sehe ich weiterhin keine Ausgabe....
 
mihe7

mihe7

Getestet, funktioniert:

Java:
import java.io.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Process proc = Runtime.getRuntime().exec("bash ./compile.sh");
        try(BufferedReader in = new BufferedReader(
                new InputStreamReader(proc.getInputStream()))) {
            String line;

            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
}

Code:
#!/bin/sh
echo "Test"
 
F

freehawk

Jetzt hab ich mein Problem gefunden.

Mein Bash Script gibt nicht sofort was aus, der erste Befehl braucht ein wenig Zeit um ausgeführt zu werden. Dadurch wird wahrscheinlich das !=null schon erfüllt in der while und das Einlesen schon abgebrochen....
 
F

freehawk

Code:
try
{
    debug.print( 2, "Compile antriggern" );
                                                                            
    Process proc = Runtime.getRuntime().exec( "./compile.sh" );
                                                                                
    BufferedReader in = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
    BufferedReader error = new BufferedReader( new InputStreamReader( proc.getErrorStream() ) );
                                                                                
    while( proc.isAlive() )
    {
        if( in.ready() == true )
        {
            compileMessages = compileMessages + in.readLine() + "\r\n";   
        }
        if( error.ready() == true )
        {
            compileMessages = compileMessages + error.readLine() + "\r\n";   
        }
    }
    debug.print( 3, compileMessages );
    proc = null;
    in = null;
                                        
    if( compileMessages.contains( "warning" ) )
    {
        debug.print( 2, "Compile mit Warnings" );
    }
    else
    {
        data = true;
    }
    if( compileMessages.contains( "error" ) )
    {
        debug.print( 2, "Compile mit Errors" );
        data = false;
    }
    else
    {
        data = true;
    }
}
catch( IOException e )
{
    debug.print( 1, "Fehler auf der Konsole: " + e.getMessage() );
}
catch( Exception e )
{
    debug.print( 1, "Fehler auf der Konsole: " + e.getMessage() );
}
 
Thema: 

Shell Script ausführen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben