Sascha_77
Aktives Mitglied
Thread Starter
- Dabei seit
- 23.10.2005
- Beiträge
- 766
- Reaktionspunkte
- 99
GELÖST: If-Abfragen und Schleifen bereiten mir graue Haare.
Hi Leute.
Nachdem ich gestern etliche Stunden damit verbracht habe mir ein Bash-Script zu bauen und ich es nicht 100% hinbekomme, wende ich mich jetzt vertrauensvoll an Euch.
Folgende Situation:
Ich habe ein Programm welches nur über eine GUI bedienbar ist (leider). Was bis jetzt funktioniert ist, das das Bash-Script solange wartet bis das Programm läuft (dank einer while-schleife) und führt dann ein Mouse-Script aus (Mauszeiger bewegt sich mittels einem externen Macro-Programm) welches einen bestimmten Button des Programms drückt. Soweit klappt das alles super.
Jetzt kommt das ABER. Jetzt muss das Script aber auch bemerken, dass das Programm durchgelaufen ist und es dann (wieder mit einem Macro für die Mouse) das Programm schließt.
Und hier liegt jetzt der Hund begraben. Ich habe bereits einen Lösungsansatz der in der Theorie klappen müsste aber in der Praxis nicht wirklich rund läuft. Um das ganze zu veranschaulichen hier der Teil des scripts der ohne Probleme funktioniert:
So und jetzt kommt das was ich nicht wirklich hinbekomme. Ich möchte das das Script prüft obs Programm noch läuft indem es eine bestimmte Datei auf seine Änderungsuhrzeit hin überprüft und es mit der Systemzeit vergleich. Bei Abweichungen größer Null (ich habe mit Cut die ergebnisse der Uhrzeit auf die Minuten geschnitten. Sprich 2-stellig Zahlen) soll es dann das Mouse-Macro zum schliessen der GUI des Programms aktivieren. Vom Prinzip her habe ich das soweit auch lauffähig, klappt aber nicht zu meiner Zufriedenheit, weil es das Programm schließt obwohl es noch mit dem schreiben der Datei zugange ist. Das Script für diese Abfrage schaut so aus:
So jetzt meine Frage. Wie kriege ich die beiden Scripts richtig "verheiratet"? Und wie schaffe ich es, dass er nicht denkt das Programm ist fertig obwohl es das aber noch nicht ist und fleissig in eine Datei reinschreibt.
Hi Leute.
Nachdem ich gestern etliche Stunden damit verbracht habe mir ein Bash-Script zu bauen und ich es nicht 100% hinbekomme, wende ich mich jetzt vertrauensvoll an Euch.
Folgende Situation:
Ich habe ein Programm welches nur über eine GUI bedienbar ist (leider). Was bis jetzt funktioniert ist, das das Bash-Script solange wartet bis das Programm läuft (dank einer while-schleife) und führt dann ein Mouse-Script aus (Mauszeiger bewegt sich mittels einem externen Macro-Programm) welches einen bestimmten Button des Programms drückt. Soweit klappt das alles super.
Jetzt kommt das ABER. Jetzt muss das Script aber auch bemerken, dass das Programm durchgelaufen ist und es dann (wieder mit einem Macro für die Mouse) das Programm schließt.
Und hier liegt jetzt der Hund begraben. Ich habe bereits einen Lösungsansatz der in der Theorie klappen müsste aber in der Praxis nicht wirklich rund läuft. Um das ganze zu veranschaulichen hier der Teil des scripts der ohne Probleme funktioniert:
PHP:
while [ true ]
do
run=`ps ax | grep "programm.exe" | grep -v grep`
if [ "$run" = "" ]; then
sleep 1
echo "Rennt nicht. Also noch warten."
else
echo "Rennt. Also muss nun geprüft werden wie lang das Programm aktiv ist um es nach Fertigstellung wieder schliessen zu können."
exit
fi
done
So und jetzt kommt das was ich nicht wirklich hinbekomme. Ich möchte das das Script prüft obs Programm noch läuft indem es eine bestimmte Datei auf seine Änderungsuhrzeit hin überprüft und es mit der Systemzeit vergleich. Bei Abweichungen größer Null (ich habe mit Cut die ergebnisse der Uhrzeit auf die Minuten geschnitten. Sprich 2-stellig Zahlen) soll es dann das Mouse-Macro zum schliessen der GUI des Programms aktivieren. Vom Prinzip her habe ich das soweit auch lauffähig, klappt aber nicht zu meiner Zufriedenheit, weil es das Programm schließt obwohl es noch mit dem schreiben der Datei zugange ist. Das Script für diese Abfrage schaut so aus:
PHP:
while [ true ]
do
sleep 70
latest=`ls -1t *.txt|head -n1`
filetime1=`perl -e '@d=localtime ((stat(shift))[9]); printf "%02d-%02d-%04d %02d:%02d:%02d\n", $d[3],$d[4]+1,$d[5]+190,$d[2],$d[1],$d[0]' "$latest" | cut -c 15-16`
systime=`date | cut -c 19-20`
if [ "$filetime1" = "$systime" ]; then
echo "Programm ist noch am schreiben. Nicht schließen.
else
echo "Programm ist fertig und kann geschlossen werden"
exit
fi
done
So jetzt meine Frage. Wie kriege ich die beiden Scripts richtig "verheiratet"? Und wie schaffe ich es, dass er nicht denkt das Programm ist fertig obwohl es das aber noch nicht ist und fleissig in eine Datei reinschreibt.
Zuletzt bearbeitet: