Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Runtime.exec ruft indirekt atftp auf fehler

Empfohlene Antworten

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?

evtl. am fehlenden Minus ("-")?

Schöne Grüße,

Peter

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

PWD: /media/disk/Projekt

JAVA: /media/disk/Projekt/Main.java

SHELL: /media/disk/Projekt/atftp/ddwrt.sh

//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.

Interpeter sollte eigentlich die Shell sein (/bin/sh).

Außerdem liefert Runtime.exec ein Process-Objekt zurück. Was sagt den dessen exitValue ?

Bearbeitet von etreu

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...");

		}

Kurz mal zwischendurch:

Ja, ich benutzte eine Entwicklungsumgebung: eclipse.

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

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 

Funktioniert!!!

Habe aus InputSteam ein ErrorSteam gemacht und das ganze Programm läuft.

Danke für die Hilfe^^

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.