Zum Inhalt springen

shell script aufrufen


Empfohlene Beiträge

Geschrieben

Moin Moin,

hat jemand ein Beispiel wie man ein Shellscript unter Java aurufen kann und anschließend das ausgelesene des Shellscriptes zurückbekommt ?

sprich wenn ich ein Hello World als Shellscript hätte, dieses aufgerufen wird, ich ein "Hello World" in Java übergeben bekomme

Geschrieben

Soll das Script das Programm aufrufen oder das Programm das Script um Daten zu bekommen?

Beim ersteren einfach Kommandozeilenargumente, beim zweiteren plattformabhängig (im Regelfall aber meistens über eine Dateiumleitung)

Geschrieben

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 ?

Geschrieben

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

Geschrieben

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ß

Geschrieben

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

Geschrieben

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.

Geschrieben

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 =)

Geschrieben

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

Geschrieben
warum wird der ProcessBuilder bei mir angemakert

Keine Ahnung, welche Fehlermeldung wird angezeigt?

muss ich da noch irgendetwas importieren

Nein. Der ProcessBuilder gehört zum 'java.lang' Package, du musst nichts importieren.

Gruß

Geschrieben

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

Geschrieben (bearbeitet)

das Skript liegt im selben Ordner...

  • Benutzt du eine Entwicklungsumgebung?
  • In welchem Ordner liegt das File?

Andererseits, versuchs mal mit './HelloWorld.sh'.

Gruß

Bearbeitet von kein-tee
Geschrieben

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ß

Geschrieben

Also zum Verständnis, der Workspace den du in Eclipse angegeben hast ist "/user/java"?

und genau in diesem Verzeichnis liegt auch dein Skript?

Dann versuch mal bei "<MeinSkript>" "../HelloWorld.sh" einzutragen. Oder verschiebe die Skriptdatei einfach in deinen Projektordner.

Geschrieben

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

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