Hace un tiempo escribí un guión para esperar el final de otro proceso. NOISE_CMDpodría ser algo así notify-send ..., dado que DISPLAYestá configurado correctamente.
#!/bin/bash
NOISE_CMD="/usr/bin/mplayer -really-quiet $HOME/sfx/alarm-clock.mp3"
function usage() {
echo "Usage: $(basename "$0") [ PROCESS_NAME [ PGREP_ARGS... ] ]"
echo "Helpful arguments to pgrep are: -f -n -o -x"
}
if [ "$#" -gt 0 ] ; then
PATTERN="$1"
shift
PIDS="$(pgrep "$PATTERN" "$@")"
if [ -z "$PIDS" ] ; then
echo "No process matching pattern \"$PATTERN\" found."
exit
fi
echo "Waiting for:"
pgrep -l "$PATTERN" "$@"
for PID in $PIDS ; do
while [ -d "/proc/$PID" ] ; do
sleep 1
done
done
fi
exec $NOISE_CMD
Sin ningún argumento, solo haga un poco de ruido de inmediato. Este comportamiento permite algo como esto por conveniencia (digamos que llama script a continuación alarm.sh):
apt-get upgrade ; ~/bin/alarm.sh
Por supuesto, puede hacer muchas cosas divertidas con un script de este tipo, como dejar que una instancia alarm.shespere una instancia de alarm.sh, que esté esperando algún otro comando. O ejecutar un comando justo después de que una tarea de otro usuario conectado haya terminado ...>: D
Una versión anterior de la secuencia de comandos anterior puede ser interesante, si desea evitar una dependencia pgrepy aceptar buscar ID de proceso usted mismo:
#!/bin/bash
if [ "$#" -lt 2 -o ! -d "/proc/$1" ] ; then
echo "Usage: $(basename "$0") PID COMMAND [ ARGUMENTS... ]"
exit
fi
while [ -d "/proc/$1" ] ; do
sleep 1
done
shift
exec "$@"
Ligeramente fuera de tema, pero útil en situaciones similares: uno podría estar interesado en reptyruna herramienta que "robe" un proceso de algún shell (padre) y lo ejecute desde el shell actual. He intentado implementaciones similares y reptyres la más bonita y confiable para mis propósitos.