Bash und Eingabeumlenkung

Rene Albrecht

Erfahrenes Mitglied
Hi,

ich habe ein Problem mit Ein- und Ausgabeumlenkung in einem Bash-Skript, vielleicht weiß ja von Euch jemand mehr als google. ;)

Folgende Problematik:
Ich möchte ein Skript schreiben, das u.a. ein Programm steuern soll. Das möchte ich über eine Ein- und Ausgabeumlenkung, die ich jedoch nicht zum laufen bekomme. Die Ausgabe des Programms (über stdout/stderr) soll zur Laufzeit vom Skript analysiert und ggf. (durch Umleitung von stdin) entsprechende Eingaben zum Programm geschickt werden. Allerdings bekomme ich das nicht wirklich hin: bei mir sieht das so aus, dass das Programm seine Ausgaben macht (sichtbar durch tail -f auf die Ausgabe-Datei), die Schleife zum Auslesen der Ausgaben von stdout/stderr jedoch erst nach Beendigung des Programms durchlaufen wird.

Hat jemand so etwas vielleicht schon einmal geschrieben und kann mir Tipps geben, wie ich evtl. skriptgesteuert in einen Programmablauf eingreifen kann? Die Eingaben sind an bestimmte Bedingungen geknüpft, das Schreiben einer einfachen Datei mit Inputs hilft mir also nicht weiter.

Gruß & Dank
René
 
Was grds. funktioniert ist
Code:
{Programm} | while read line
do
   echo xxx$line
done
für die Umleitung der Ausgabe oder
Code:
{Programm} < tmp.input
zur Umlenkung von stdin.

Aber wie gesagt, ich will die Ausgabe des Kommandos zur Laufzeit auswerten und darauf reagieren können. Alles was ich bis jetzt hinbekommen habe ist, dass die Auswertung NACH Beendigung des Programms erfolgt ist. Da die Bash I/O-Redirection ermöglicht dachte ich, dass es gehen könnte. Ich hab mir das entsprechende Kapitel im Advanced Bash-Scripting Guide angeschaut, bin aber trotzdem nicht weiter...

Ein richtiges Skript kann ich noch nicht vorweisen, ohne sinnvolle Lösung dieses Problems brauch ich das Skript gar nicht schreiben, weil das die Kernaufgabe ist. Ich wollte mir lästigen manuellen Input auf der Konsole über das Skript ersparen. In C möchte ich das nur ungern machen, weil auch meine Kollegen solch ein Skript nutzen wollen und verstehen sollen.
 
Heisst das,Du willst zur Laufzeit in die While-Schleife eingreifen ? Soweit ich weiss, ist das nicht möglich - ABER: vielleicht kann man da was machen,wenn das Programm selbst als Hintergrundprozess läuft oder man greift damittels einer Pipe ein - anders kann ich mir das kaum vorstellen *grübel*
 
Das mit dem Hintergrundprozess hab ich auch schon versucht, weil die while-Schleife ja erst greift, wenn das Programm beendet ist. Da es aber nicht beendet wird, bevor bedingte Eingaben gemacht werden, hängt das Skript dann. Aber wie gehe ich da ran?
 
Zurück