Bratmaxe
Anmeldungsdatum: 20. Mai 2008
Beiträge: 241
Wohnort: Leipzig
|
Hallo, Ich habe mir folgendes zusammengebastelt: | #!/bin/bash
/usr/bin/gqrx &
if [ "$(pulseaudio-equalizer status | grep "Equalizer status" | cut -d"[" -f2 | cut -d"]" -f1)" == "disabled" ]; then
pulseaudio-equalizer enable & notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer wurde aktiviert!"
else
notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer war bereits aktiv!"
fi
|
jetzt würde ich gern noch hinzufügen das wenn das per Script gestartete gqrx geschlossen wurde auch der pulseaudio-equalizer wieder deaktiviert wird allerdings finde ich da keine Lösung. Kann mir da jemand weiterhelfen?
|
Acer54
Anmeldungsdatum: 6. Juli 2011
Beiträge: 700
Wohnort: Bayern
|
Ich habe zwar schon ewig nichts mehr mit Bash gescriptet, aber sollte soetwas nicht mit "wait" funktionieren? So in etwa:
#!/bin/bash
sleep 10 &
notify-send "Ich schlafe für 10 sec..."
wait
notify-send "Juhu, Backgroundprozess ist beendet..." Ist das, das Verhalten das du benötigst ?
|
Bratmaxe
(Themenstarter)
Anmeldungsdatum: 20. Mai 2008
Beiträge: 241
Wohnort: Leipzig
|
ich hatte so an die richtung gedacht: | if
Programmende Programm-xyz
then
pulseaudio-equalizer disable & notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer wurde deaktiviert!"
|
Aber ich muss ja das Script auch noch dazu bekommen zu überwachen ob der gqrx prozess noch läuft... Bearbeitet von sebix: Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!
|
lionlizard
Anmeldungsdatum: 20. September 2012
Beiträge: 6244
Wohnort: Berlin
|
Guck Dir mal die Fortschrittsanzeige für dd an. Dort wird beim Start von dd die pid in eine Variable gespeichert und dann in einer Schleife abgefragt, ob die pid noch aktiv ist. Ich habe das Ganze nur ungefähr verstanden, aber damit sollte Dein Problem zu lösen sein.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11267
Wohnort: München
|
wait akzeptiert optional einen Job bzw. eine PID, wie man mit info bash wait erfahren kann: `wait'
wait [-n] [JOBSPEC or PID ...]
Wait until the child process specified by each process ID PID or
job specification JOBSPEC exits and return the exit status of the
last command waited for. If a job spec is given, all processes in
the job are waited for. If no arguments are given, all currently
active child processes are waited for, and the return status is
zero. If the `-n' option is supplied, `wait' waits for any job to
terminate and returns its exit status. If neither JOBSPEC nor PID
specifies an active child process of the shell, the return status
is 127.
Also z.B.:
| foo &
FOO_PID=$!
# hier kannst du etwas anderes ausführen
wait $FOO_PID
|
|
Acer54
Anmeldungsdatum: 6. Juli 2011
Beiträge: 700
Wohnort: Bayern
|
seahawk1986 schrieb: wait akzeptiert optional einen Job bzw. eine PID, wie man mit info bash wait erfahren kann
Müsste ein wait (ohne Argumente) am Schluss eines Scripts, nicht warten bis "alle" gestarteten Prozesse rückgemeldet (exitcode) haben?
Bei meinem Beispiel oben ist es so, dass erst die erste Meldung ausgegeben wird, nach 10 Sekunden dann die 2te, was heißt, dass wait auf den Hintergrund-job wartet... Ich würde das auch so aus der man verstehen. ("...If no arguments are given, all currently active child processes are waited for...")
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13219
|
Acer54 schrieb:
Müsste ein wait (ohne Argumente) am Schluss eines Scripts, nicht warten bis "alle" gestarteten Prozesse rückgemeldet (exitcode) haben?
Das ist halt die Frage. Wenn pulseaudio-equalizer länger läuft, dann will man auf diesen Prozess ggf. nicht warten. Ich habe gerade kein Linux da um die Ausgabe von pulseaudio-equalizer status anzuschauen. Man kann die Erkennung aber einfacher als im ursprünglichen Skript machen. Eine mögliche Lösung: 1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/sh
/usr/bin/gqrx &
gprx_pid=$!
if pulseaudio-equalizer status | egrep -q 'Equalizer status.*disabled'; then
pulseaudio-equalizer enable &
notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer wurde aktiviert!"
else
notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer war bereits aktiv!"
fi
wait $gprx_pid
|
|
Bratmaxe
(Themenstarter)
Anmeldungsdatum: 20. Mai 2008
Beiträge: 241
Wohnort: Leipzig
|
Hallo, erstmal vielen Dank an alle. der Hinweis wait war dann die Lösung, und auch danke für den Tipp mit der Vereinfachung der Erkennung des pulseaudio-equalizer Status der Vollständigkeit halber das fertige Script: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #!/bin/sh
/usr/bin/gqrx &
gprx_pid=$!
if pulseaudio-equalizer status | egrep -q 'Equalizer status.*disabled'; then
pulseaudio-equalizer enable &
notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer wurde aktiviert!"
else
notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer war bereits aktiv!"
fi
wait $gprx_pid
pulseaudio-equalizer disable & notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "Hinweis" "Pulseaudio Equalizer wurde deaktiviert!"
exit 0
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13219
|
Bratmaxe schrieb:
erstmal vielen Dank an alle.
Danichfür.
der Hinweis wait war dann die Lösung, und auch danke für den Tipp mit der Vereinfachung der Erkennung des pulseaudio-equalizer Status
Bitte!
der Vollständigkeit halber das fertige Script:
[...]
Du kannst natürlich noch etwas die Redundanz reduzieren: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #!/bin/sh
notify() {
notify-send -i /usr/share/icons/gnome/48x48/status/dialog-warning.png "$@"
}
/usr/bin/gqrx &
gprx_pid=$!
if pulseaudio-equalizer status | egrep -q 'Equalizer status.*disabled'; then
pulseaudio-equalizer enable &
notify 'Hinweis' 'Pulseaudio Equalizer wurde aktiviert!'
else
notify 'Hinweis' 'Pulseaudio Equalizer war bereits aktiv!'
fi
wait $gprx_pid
pulseaudio-equalizer disable &
notify 'Hinweis' 'Pulseaudio Equalizer wurde deaktiviert!'
exit 0
|
Meines Erachtens verlierst Du Lesbarkeit, wenn Du den notify-send direkt hinter den Befehl packst, der in den Hintergrund geschickt wird (Zeile 15 in Deiner Version). Das überliest man dann leicht als && . Und außerdem wird die Zeile dann so lang.
|
Bratmaxe
(Themenstarter)
Anmeldungsdatum: 20. Mai 2008
Beiträge: 241
Wohnort: Leipzig
|
Danke, die Zeile 15 sollte auch mit Zeilenumbruch sein , hab ich in der Freude das es jetzt so funktioniert wie ich es gerne hätte übersehen ☺ Ansonsten habe ich nur die Befehle die ich z.b. ins Terminal eingegeben hätte, nacheinander abgearbeitet. bin ja ein Bash-Neuling, muss mich noch einarbeiten. macht mir aber irgendwie Spaß damit zu arbeiten , vor allem wenn man das Ergebnis erreicht hat was man wollte und sieht was alles machbar ist.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13219
|
Bratmaxe schrieb:
die Zeile 15 sollte auch mit Zeilenumbruch sein , hab ich in der Freude das es jetzt so funktioniert wie ich es gerne hätte übersehen ☺
☺
bin ja ein Bash-Neuling, muss mich noch einarbeiten.
Wir haben ja alle mal irgendwo angefangen.
macht mir aber irgendwie Spaß damit zu arbeiten , vor allem wenn man das Ergebnis erreicht hat was man wollte und sieht was alles machbar ist.
👍 Das ist auch die beste Motivation: ein Erfolgserlebnis. ☺
|