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