为了在 Linux (Ubuntu) 上拦截 ( notify-osd
) 通知,我使用dbus-monitor
下面的脚本。随后,该脚本运行另一个脚本 ( /opt/nonotifs/nonotifs/silent
),并将截获的通知作为参数,以进行进一步处理:
#!/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 {}
这工作完美无缺,除了通知hplip
。
从终端运行时,上面的脚本显示:
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
但是,当使用该选项-0
时,脚本根本不提供任何参数。
我试过的
在某些情况下,脚本随后会中断。如果总是这样,可以通过在我尝试过的“保持活力”-包装器中运行它来解决它。然而,脚本通常不会终止,但它仍然会停止返回截获的通知。
我该如何解决这个问题?
编辑
正如@Serg 所建议的那样,我将xargs...
部分替换为cat -A
, 以查看传递给xargs
. 这说明(第三行)的通知中确实有一个不匹配的双引号hplip
,这似乎是通知中的一个错误。
运行时的输出cat -A
,调用通知:
"hplip"$
"HPLIP Device Status"$
"Officejet_Pro_8600$
"transient"$
来自
man xargs
:举个例子:
当然,使用其中之一可能会破坏事情,但可能不如
-0
.