Asgar13 Geschrieben 7. März 2011 Teilen Geschrieben 7. März 2011 Hallo, Ich habe ein Javaprogramm, welches ein Shellscript ausführt, dieses Shellscript setzt einen path und ruft atftp(zum Router flashen) auf. wenn ich den Befehl atftp/dd-wrt.sh in der Shell eingebe, führt er alles problemlos aus. wenn ich mit Java über Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "atftp/ddwrt.sh"}).waitFor(); führt er den Befehl nicht aus. Hat jemand eine Idee, woran das liegt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 7. März 2011 Teilen Geschrieben 7. März 2011 evtl. am fehlenden Minus ("-")? Schöne Grüße, Peter Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 7. März 2011 Autor Teilen Geschrieben 7. März 2011 Danke, war ein Schlampigkeitsfehler von mir(behebt aber leider nicht das Problem): Habe aus versehen ein Bindestrich hinein geschrieben. atftp/ddwrt.sh Dateiname: ddwrt.sh Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 7. März 2011 Teilen Geschrieben 7. März 2011 Was ist dein PWD? Wo liegt das Javaprog und wo liegt das Skript? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 7. März 2011 Autor Teilen Geschrieben 7. März 2011 PWD: /media/disk/Projekt JAVA: /media/disk/Projekt/Main.java SHELL: /media/disk/Projekt/atftp/ddwrt.sh Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 7. März 2011 Teilen Geschrieben 7. März 2011 Lege mal testweise File-Objekte für den Interpreter und das Skript an und prüfe, ob die auf existierende Dateien zeigen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 10. März 2011 Autor Teilen Geschrieben 10. März 2011 //Test File dd = new File("atftp/ddwrt.sh"); File inter = new File("/usr/bin/java"); boolean wrt = dd.exists(); boolean preter = inter.exists(); instructions.setText(" "+wrt+" "+preter); Ich habe das Programm noch mal getestet, mit den obrigen eingebauten Zeilen, bei beiden sagt er mir true.(Habe eine GUI) Ich versuche jetzt mal, die Shellausgabe abzufangen vom Shellscript, vielleicht steht da etwas interessantes drin. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 10. März 2011 Teilen Geschrieben 10. März 2011 (bearbeitet) Interpeter sollte eigentlich die Shell sein (/bin/sh). Außerdem liefert Runtime.exec ein Process-Objekt zurück. Was sagt den dessen exitValue ? Bearbeitet 10. März 2011 von etreu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 10. März 2011 Autor Teilen Geschrieben 10. März 2011 exitValue sagt mir, 0. Und /bin/sh ersetzen sagt mir auch true: //Test File dd = new File("atftp/ddwrt.sh"); File inter = new File("/bin/sh"); boolean wrt = dd.exists(); boolean preter = inter.exists(); instructions.setText(" "+wrt+" "+preter); try{ Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "atftp/ddwrt.sh "}); p.waitFor(); fieldR1.setText(""+ p.exitValue()); } catch(IOException ioexp){ instructions.setText("Fehler beim ausführen der Datei..."); } catch(Exception exp){ instructions.setText("Fehler beim ausführen der Datei..."); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 10. März 2011 Teilen Geschrieben 10. März 2011 - Arbeitest du in einer IDE? - Probier es mal absuluten Pfaden - Probier das Kommando als einen String abzusetzen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 10. März 2011 Autor Teilen Geschrieben 10. März 2011 Kurz mal zwischendurch: Ja, ich benutzte eine Entwicklungsumgebung: eclipse. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 10. März 2011 Autor Teilen Geschrieben 10. März 2011 Zwischenreport: 1. absoluter Pfad hat den gleichen Effekt. 2. ausgabe vom Shellscript auf die Shell und dann in Java, habe ich nicht gefunden. 3. Habe mir ein anderes Shellscript gemacht, dieses beeinhaltet nur mkdir ok und dieses hat es mit dem Befehl und relativem Pfad funktioniert, habe dann noch einen zweiten Versuch mit export LD_LIBRARBY_PATH und aufrufen eines Programms gemacht, hat auch funktioniert, blos dieses atftp nicht.(Funktioniert nur über Shell???) 4. Beim String bin ich gerade dran Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 10. März 2011 Autor Teilen Geschrieben 10. März 2011 4. Funktioniert auch nicht. (Glaube langsam es liegt an der Art, wie das Shellscript aufgerufen wird) try { String atftp[]={"/bin/sh", "-c", "/media/6ddd2fdc-0090-4b7a-a505-62da639cab56/Projekt/atftp/ddwrt.sh"}; Process p = Runtime.getRuntime().exec(atftp); BufferedReader in = new BufferedReader( new InputStreamReader((p.getInputStream()))); for (String buffer;(buffer = in.readLine()) != null; //System.out.println(buffer)); instructions.setText(buffer)); in.close(); } catch (IOException ioe) { ioe.printStackTrace(); } Shellscript: #!/bin/sh export LD_LIBRARY_PATH=atftp/lib atftp/atftp --option "mode octet" --trace --no-source-port-checking --verbose -p -l firmware/dd-wrt.v24-14896_NEWD-2_K2.6_mini_RT-N16.trx 192.168.1.1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 11. März 2011 Autor Teilen Geschrieben 11. März 2011 Funktioniert!!! Habe aus InputSteam ein ErrorSteam gemacht und das ganze Programm läuft. Danke für die Hilfe^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.