You can, but you must use a patched libnotify to do so
notify-send does not have the capability to replace existing notifications before they have timed out (or disappeared). This is a known bug. However, a commenter on the bug report has posted a patch to fix it.
Installing the patched libnotify-bin from PPA
I have created a patched version of the libnotify-bin package which allows replacements in my PPA. Currently it's for Ubuntu 12.04 only, but if you need it for any other currently supported release, please post a comment and I will try my best to make it available.
To install, open a terminal and:
sudo apt-add-repository ppa:izx/askubuntu
sudo apt-get update
sudo apt-get install libnotify-bin
How to use the replacement capabilities
The patched notify-send includes two new switches, -p (or --print-id ), and -r (or --replace-id ). The --help describes them as:
-p, --print-id Print the notification ID.
-r, --replace-id=REPLACE_ID The ID of the notification to replace.
- With
-p, each notify-send will return an ID N (number/integer).
- Issuing another
notify-send with -r N will replace the previous notification immediately.
For example, for bash, you can save the ID from notify-send -p ... with:
NID=$(notify-send -p "MESSAGE-1")
and then replace it with:
notify-send -r $NID "MESSAGE-2"
You can recursively use both -p and -r in a script, as long as the -r variable is initialized to 0 at the beginning.
Here's a simple script that shows notifications counting from 0 to 100 at half-second intervals:
#!/bin/bash
NID=0
for i in {0..100..10}
do
NID=$(notify-send -p -r $NID $i)
sleep 0.5
done