Shell Script ausführen

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
 
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....
 
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"
 
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....
 
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() );
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben