Moin
Dank Eurer beiden Tips konnte ich das Problem jetzt lösen. Ich habe tatsächlich beide Tips zur Lösung verwendet. Für den Dialog habe ich mir die paar Kilobytes mit "dialog" installiert und das sieht sogar recht ansprechend aus. Die Rückgabe läuft über eine Datei. Und jetzt funktioniert es richtig gut.
Allerdings hat mich das doch jetzt echt lange beschäftigt und das war ein ziemlich unangenehmes Problem. Ich habe mich zulange mit dem Versuch aufgehalten, den Befehl
Terminal->Dialog->RückgabeInFile innerhalb einer Zeile und innerhalb des Scripts zu realisieren. Aber keine Chance... -e mit mehreren Kommandos beim terminalstart funktionierte hier nicht, mit keiner Syntax. Es funktionierte erst mit rekursivem Start.
Ich habe das Beispiel jetzt mal mit lesbaren Texten versehen.... die ich aus Faulheit aus meinem anderen Script verwendet habe. In dem anderen Script läuft genau dieser Autoupdate erfolgreich mit Zenity. Dieses Beispiel bzw. die Texte hier haben nichts mit dem späteren eigentlichen Zweck zu tun, sondern das ist hier nur mein Testprogramm - die Texte sollen die Scriptlogik bzw. den Programmablauf nur anchaulicher und leichter verständlich machen. Der Fokus liegt allein auf dem Dialog und der Rückgabe dessen Ergebnisses an die Parent-Instanz. Drei unterschiedliche Rückgaben können passieren: 0=ja, 1=nein, 255=timeout
Code: Alles auswählen
#! /bin/bash
pushd `dirname $0` >/dev/null 2>&1
ProgPath=`pwd`
ProgFullName=$ProgPath/`basename $0`
popd >/dev/null 2>&1
text1="Sollen verfuegbare Updates automatisch installiert werden?\n\nWaehrend des Updates kann der PC ganz normal benutzt werden. Bitte den Rechner\nnicht ausschalten, bevor die Meldung erfolgt ist, dass die Updates abgeschlossen sind."
text2="Verfuegbare Updates wurden erfolgreich automatisch installiert!"
if [ "$1" == "-Q" ]; then
dialog --timeout 240 --yesno "$text1" 8 96
echo $? >$ProgFullName.response
exit 0
fi
#lxterminal --geometry=50x11 -e "dialog --yesno 'TextTextTextText\nZeile2Zeile2' 8 40"
lxterminal --geometry=100x11 -e "$ProgFullName -Q"
i=0
while [ $i -lt 240 ]; do
[ -f $ProgFullName.response ] && break
i=$[$i+1]
/bin/sleep 1
done
if [ -f $ProgFullName.response ]; then
response=$(cat $ProgFullName.response)
rm $ProgFullName.response
fi
#debug
#echo $ProgFullName.response
#echo "response="$response
sync
if [ "$response" == "0" ]; then
lxterminal --geometry=44x9 -e "dialog --timeout 60 --msgbox '$text2' 6 40"
fi
exit 1