Zum Inhalt springen

shell script aufrufen


DerKoenig

Empfohlene Beiträge

also das betriebsystem = linux (redhat 4)

das java programm stellt die grafische oberfläche da, über die eine ausgabe stattfinden soll

also ruft das java programm ein shellscript auf welches die auszugebenden werte an das java programm übergeben soll

ich hab bereits gehört dass es n icht möglich sein soll und man lediglich einen wert 1 oder 0 zurückbekommen kann welcher für das beenden bzw laufen des programmes steht.

ist dies so ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, theoretisch gibts 0 zurück wenn ein Programm erfolgreich beendet wurde, ansonsten Non-Zero.

nachschauen, was das Programm aber nun auswirft wird nicht so einfach, da es in die Konsole schreibt.

Du kannst aber mit "script.sh >> datei" die ausgabe des scripts auf eine Datei umleiten und dann mittels Java auslesen + gewünschtes Ergebnis parsen.

Aber wenns wirklich nur ein Script ist, würd ich das ehrlich gesagt nachprogrammieren. (Kommt aber auf den Umfang des Scripts an.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Prozesse in Java lassen sich grundsätzlich über Runtime.exec oder den ProcessBuilder starten. Neben dem Rückgabewert des Prozesses, kannst du selbstverständlich auch die Standard-Ausgabe und Standard-Fehlerausgabe überwachen. Es ist auch möglich die Standard-Eingabe zu nutzen um Daten zu übergeben.

Nähere Information hierzu findest du hier:

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, danke erstmal für die Antworten

@kein-tee

hast du vielleicht ein simples Beispiel, wenn man zB das shellscript "Hello World" aufrufen möchte und einfach die Ausgabe des Scriptes in eine Variable speichern oder über ein System.out.println in Java ausgeben will ?

wäre echt hilfreich

danke im vorraus ^^ falls wer anders ein Beispiel hat wäre mir das auch recht :)

thx und greez

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da mich das jetzt auch mal interessiert hat, hier mal nen kleines Beispiel:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;



public class ProcessBuilderTest {


	public static void main(String[] args) {

		ProcessBuilder pb = new ProcessBuilder(new String[]{"<deinSkript>"});

		try {

			Process p = pb.start();


			BufferedReader in = new BufferedReader( new InputStreamReader((p.getInputStream())));


			String line = null;

			while((line = in.readLine()) != null)

				System.out.println(line);


		} catch (IOException e) {

			e.printStackTrace();

		}

	}


}

Das Programm ruft das Skript auf und leitet den gesamten Text aus der Standardausgabe des Skriptes an die Standardausgabe des Programms weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vielen dank

nur ganz kleines ein Verständnisproblem und zwar zur folgenden Zeile

ProcessBuilder pb = new ProcessBuilder(new String[]{"<deinSkript>"});

dieses new String[]{}

warum {} und was hat das zu bedeuten ^^ bin noch nie mit einer solchen Schreibweise oder mit einem solchen Ausdruck konfrontiert worden

danke im vorraus =)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist einfach nur ne Kurzschreibweise um ein Array zu deklarieren und gleichzeitig mit Werten zu befüllen. Innerhalb der geschweiften Klammern stehen die Werte des Arrays.

Und ein Arrays ist es deshalb, weil du nach dem namen noch Parameter angeben kannst, die an das Kommando übergeben werden.

Wenn aber Java 1.5 oder höher benutzt kannste auch einfach die Strings ganz normal hintereinander wie bei einem normalen Methodenaufruf schreiben, also zB. so:


ProcessBuilder pb = new ProcessBuilder("<deinSkript","<1. Parameter>","<2. Parameter>","<usw>");

Link zu diesem Kommentar
Auf anderen Seiten teilen

aber mal noch ne andere frage ich hab den provessbuilder trotzdem mal ausprobiert und wenn ich statt <MeinSkript> einfach HelloWorld.sh eintrage bekomme ich folgende FehlerMeldung

sry für mein Newbe wissen ^^ bin noch nicht all zu erfahren in dem Bereich

java.io.IOException: Cannot run program "HelloWorld.sh": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(Unknown Source)

at ExecScript.main(ExecScript.java:13)

...

das Skript liegt im selben Ordner...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Skript liegt wahrscheinlich an der falschen Stelle! Da du anscheinend unter Linux arbeitest, eine ganz einfache Lösung:

Führe anstatt deinem Skript 'pwd' aus. Dir sollte dann das aktuelle Verzeichnis angezeigt werden. In diesem solltest du dann dein Skript kopieren. Einfach dann mit './' im ProcessBuilder ausführen und fertig.

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

meine vermutung ist, dass ich ersteinmal eine externe shell per java aufrufen muss ?

sonst weiss er ja nicht wo ers ausführen soll ... oder ?

also hab das script im selben ordner wie die class liegen

wie ruf ich ein terminal auf ? wenn ichs richtig verstanden hab, kann ich ja die reihenfolge der befehle in dem string array angeben ? oder hab ich was missverstanden

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...