staging.inyokaproject.org

Kill YAD-Fenster

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

maxzewe

Anmeldungsdatum:
10. Mai 2021

Beiträge: 13

Hallo,

nochmal eine Frage zu YAD... Ich rufe aus meinem Bash Script eine Funktion (make_iso) auf und starte gleichzeitig eine Yad Multi Progress Bar:

1
make_iso | yad --multi-progress --auto-kill --title "Hier seht der Titel" --center --text "Jetzt gehts los..." --bar="${Eingabe%?}":NORM --buttons-layout=center --button=OK:0&

Wie bekomme ich es jetzt hin das diese Yad Multi Progress Bar beim abarbeiten der Funktion bei einer bestimmten Bedingung geschlossen wird ?

Bearbeitet von rklm:

Syntaxhighlighting

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

maxzewe schrieb:

Wie bekomme ich es jetzt hin das diese Yad Multi Progress Bar beim abarbeiten der Funktion bei einer bestimmten Bedingung geschlossen wird ?

Welche Funktion meinst Du? Generell kannst Du diese Pipeline im Hintergrund mit kill -TERM $! beenden.

maxzewe

(Themenstarter)

Anmeldungsdatum:
10. Mai 2021

Beiträge: 13

Ich hab jetzt mal einen Teil der Funktion eingestellt. Ich rufe also die Funktion make_iso auf und erzeuge eine Multi-Progress Bar. Mir geht es jetzt darum wie ich es hinbekomme daß ich in der Funktion wenn zum Beispiel das erstellen des Verzeichnis nicht klappt ich die Multi-Progress Bar geschlossen bekomme und zurück zu meinem Hauptteil komme.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

make_iso () {
   mkdir "$folder""$Name" # Verzeichnis anlegen
   if [ ! -d "$tmpfolder""$StdzName" ]; then
      Fehler=1
      "Und hier soll die multi-progress Bar geschlossen werden und zurück zum Hauptprogramm"
   fi
   mount -o loop "$ISOPath""$Name""$ISODatName" /mnt/cdrom # ISO-Image einhängen
   cp -a /mnt/cdrom/* "$folder""$Name" # Inhalt von ISO-Image kopieren
   echo "$j:50%" # 50% an Multi-Progress Bar übertragen
   umount /mnt/cdrom # ISO Image aushängen
}

Fehler=0
make_iso | yad --multi-progress --title "Hier seht der Titel" --center --text "Jetzt gehts los..." --bar="irgendetwas":NORM --buttons-layout=center --button=OK:0

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

maxzewe schrieb:

Ich rufe also die Funktion make_iso auf und erzeuge eine Multi-Progress Bar. Mir geht es jetzt darum wie ich es hinbekomme daß ich in der Funktion wenn zum Beispiel das erstellen des Verzeichnis nicht klappt ich die Multi-Progress Bar geschlossen bekomme und zurück zu meinem Hauptteil komme.

So, wie Du es in dieser Version des Skriptes hast, vermute ich, dass yad terminiert, sobald die Funktion make_iso verlassen wird - ob erfolgreich oder nicht. Denn dann wird Stdin geschlossen, was für yad das Zeichen ist, dass der andere Prozess fertig ist.

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 879

Hi,

Die normale progressbar kannst du schließen, wenn du 100 übergibst. Die Zwischenschritte kannst du dir auch anzeigen lassen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
make_iso () {
   mkdir "$folder""$Name" # Verzeichnis anlegen
   if [ ! -d "$tmpfolder""$StdzName" ]; then
      Fehler=1
      echo 100    # Progressbar schließen (benötigt --auto-close)
      return 1
   fi
   echo 10   # Progressbar auf 10%
   echo "#ISO-Image einhängen"   # Anzeige über Progressbar (mit # am Anfang)
   mount -o loop "$ISOPath""$Name""$ISODatName" /mnt/cdrom # ISO-Image einhängen
   echo 30
   echo "#Inhalt von ISO-Image kopieren"
   cp -a /mnt/cdrom/* "$folder""$Name" # Inhalt von ISO-Image kopieren
   echo 50
   umount /mnt/cdrom # ISO Image aushängen
}

Fehler=0
make_iso | yad --progress --auto-close --progress-text="irgendetwas" --title="Hier seht der Titel" --center --text="Jetzt gehts los..." --buttons-layout=center --button=OK:0

Gruß TNT

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 879

Aber die Variable Fehler kannst du so nicht abfragen nach Schließen der Progressbar da müßte noch sowas rein

1
2
3
4
5
6
7
8
make_iso (){
...
}
Fehler=0
make_iso | ...
if [ "$PIPESTATUS" -ne 0 ]; then
    Fehler=1
fi

maxzewe

(Themenstarter)

Anmeldungsdatum:
10. Mai 2021

Beiträge: 13

@TNTMaster Die Progress-Bar mit 100% schließen und --autclose kann ich nicht machen da am Ende der Funktion (wenn sie ordnungsgemäß durchläuft) die Progress-Bar stehen bleiben soll und der Anwender sie mit "OK" selber schließen soll/kann. Hast Du noch eine andere Idee wie ich die Progress-Bar im Fehlerfall geschlossen bekomme damit ich im Hauptteil weiter arbeiten kann...?

maxzewe

(Themenstarter)

Anmeldungsdatum:
10. Mai 2021

Beiträge: 13

Mir ist da doch noch was eingefallen...Es würde mir schon helfen wenn ich in der Progress-Bar noch nachträglich einen Text einblenden kann. Geht so was ?

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 879

Dann würde ich es so machen, im Fehlerfall wird die Funktion verlassen und die Progressbar gekillt. Ansonsten wird die Funktion nach Abarbeiten der Befehle verlassen, die Progressbar bleibt dann stehn. Ich hoffe, ich hab das richtig verstanden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
make_iso () {
    mkdir "$folder""$Name" # Verzeichnis anlegen
    if [ ! -d "$tmpfolder""$StdzName" ]; then
        return 1
    fi
    exec 3<>$Pipe
    {
        echo 10   # Progressbar auf 10%
        echo "#ISO-Image einhängen"   # Anzeige über Progressbar (mit # am Anfang)
        mount -o loop "$ISOPath""$Name""$ISODatName" /mnt/cdrom # ISO-Image einhängen
        echo 30
        echo "#Inhalt von ISO-Image kopieren"
        cp -a /mnt/cdrom/* "$folder""$Name" # Inhalt von ISO-Image kopieren
        echo 50
        umount /mnt/cdrom # ISO Image aushängen
    } >&3
}

Pipe=$(mktemp -u)
mkfifo $Pipe
exec 3<>$Pipe
yad --progress --auto-close --progress-text="irgendetwas" \
    --title="Hier seht der Titel" --center --text="Jetzt gehts los..." \
    --buttons-layout=center --button=OK:0 <&3 &
pid=$!
Fehler=0
make_iso
ret=$?
if [ $ret -ne 0 ]; then
    Fehler=1
    kill $pid
fi

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 879

Es würde mir schon helfen wenn ich in der Progress-Bar noch nachträglich einen Text einblenden kann. Geht so was ?

Solange die Progressbar offen ist, kannst du Text (der mit # beginnt) oder eine Zahl nach >&3 umleiten, der dann angezeigt wird.

Wenn du im Hauptprogramm warten willst, bis die Progressbar geschlossen wird, kannst du den Befehl wait nutzen.

ab Zeile 29 dann so weiter

1
2
3
4
5
6
7
if [ $ret -ne 0 ]; then
    Fehler=1
    kill $pid
else
    echo "#Image Erstellung fertig" >&3
    wait   # Warten bis Progressbar geschlossen wird
fi

maxzewe

(Themenstarter)

Anmeldungsdatum:
10. Mai 2021

Beiträge: 13

Vielen Dank für die Hilfe, hat mir sehr geholfen... Ich habe das mit dm nachträglichen Text einblenden jetzt so gelöst:

printf "$j:#Fehler aufgetreten, bitte Logdatei ansehen...\n"

Gruß und Danke

Antworten |