如何从 bash 中清除气球弹出窗口

Ste*_*fan 7 script bash notifications ubuntu

我正在notify-send脚本中设置通知。唯一的问题是,当脚本被多次调用时,所有的通知都会被添加到一个通知堆栈中,并且只会一个接一个地调用。

有没有办法清除屏幕上的所有通知并显示新通知?

小智 16

这实际上是可行的使用通知发送:

notify-send --hint int:transient:1 "Title" "Body"
Run Code Online (Sandbox Code Playgroud)

通过设置transient提示,当通知过期或关闭时,它不会在通知栏中徘徊。


Dan*_*ruz 4

不幸的是,您无法清除或“关闭”notify-osd通知。使用Zenity可能会有更好的运气;它比notification-send更多选项

您可以使用该--timeout选项在几秒后关闭通知。

zenity --info --timeout=5 --title="Test Notification" --text "$(date +%Y%m%d-%H%M%S): My notification"
Run Code Online (Sandbox Code Playgroud)

您还可以保留先前通知的进程 ID 列表(在环境变量或文件中),并向它们发送信号HUP以在显示新通知之前清除它们。

i=0
pids=
for x in $(seq 1 5); do
    i=$((i + 1))
    zenity --info --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &
    pids+="$! "
done
sleep 5
for p in $pids; do kill -HUP $p >/dev/null 2>&1; done
i=$((i + 1))
zenity --info --timeout=2 --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &
Run Code Online (Sandbox Code Playgroud)

zenity或者在显示新通知之前终止所有进程:

killall zenity
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &
Run Code Online (Sandbox Code Playgroud)

zenity或者在显示新通知之前终止某些进程:

ps ho pid,args | grep -i 'zenity.\+--title=test notifications' | sed -e 's/^ *\([0-9]\+\).*$/\1/'
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &
Run Code Online (Sandbox Code Playgroud)