Um ( notify-osd
) Benachrichtigungen unter Linux (Ubuntu) abzufangen , verwende ich das folgende dbus-monitor
Skript. Anschließend führt das Skript ein weiteres Skript ( /opt/nonotifs/nonotifs/silent
) mit der abgefangenen Benachrichtigung als Argument zur weiteren Verarbeitung aus:
#!/bin/bash
dbus-monitor "interface='org.freedesktop.Notifications'" | \
grep --line-buffered "string" | \
grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | \
grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | \
grep --line-buffered -v '^\s*$' | \
xargs -I '{}' /opt/nonotifs/nonotifs/silent {}
Dies funktioniert einwandfrei, außer mit Benachrichtigungen von hplip
.
Wenn das Skript von einem Terminal aus ausgeführt wird, zeigt es Folgendes:
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
Bei Verwendung der Option -0
liefert das Skript jedoch überhaupt kein Argument.
Was ich versucht habe
In einigen Fällen wird das Skript anschließend unterbrochen. Wenn dies immer der Fall wäre, könnte es umgangen werden, indem es in einem "Keep Alive" -Wrapper ausgeführt wird, den ich ausprobiert habe. Oft wird das Skript jedoch nicht beendet, aber die zurückgegebenen Benachrichtigungen werden trotzdem nicht mehr zurückgegeben.
Wie kann ich das lösen?
Bearbeiten
Wie von @Serg vorgeschlagen, habe ich den xargs...
Abschnitt durch ersetzt cat -A
, um zu sehen, an was übergeben wird xargs
. Dies zeigt, dass die Benachrichtigung von (die dritte Zeile) tatsächlich ein unübertroffenes doppeltes Anführungszeichen enthälthplip
, was ein Fehler in der Benachrichtigung zu sein scheint.
Die Ausgabe beim Ausführen mit cat -A
, Aufruf der Benachrichtigung:
"hplip"$
"HPLIP Device Status"$
"Officejet_Pro_8600$
"transient"$
"hplip"$ "HPLIP Device Status"$ "Officejet_Pro_8600$ "transient"$
, was in der Tat ein unübertroffenes doppeltes Zitat (in "Officejet_Pro_8600$
) zeigt
"Officejet_Pro_8600$
- eine falsche Benachrichtigung ...
tr -d '"'
, um die doppelten Anführungszeichen zu löschen?
cat -A
stattxargs
dort