#!/bin/bash # annoyme - script to allow user intervention to otherwise backgrounded process. # Copyright (C) 2016 Karel Kočí # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. DOT_ANNOYME=~/.annoyme NAME=$1 EC=2 onexit() { rm -f "$DOT_ANNOYME/$NAME.script" rm -f "$DOT_ANNOYME/$NAME.pid" rm -f "$DOT_ANNOYME/$NAME.desc" rm -f "$DOT_ANNOYME/$NAME.out" kill $SLEEPID 2>/dev/null exit $EC } trap onexit EXIT INT QUIT TERM ABRT mkdir -p $DOT_ANNOYME echo "#!/bin/bash" > "$DOT_ANNOYME/$NAME.script" while read -r LINE; do echo "$LINE" >> "$DOT_ANNOYME/$NAME.script" done chmod +x "$DOT_ANNOYME/$NAME.script" echo "$$" > "$DOT_ANNOYME/$NAME.pid" echo "$2" > "$DOT_ANNOYME/$NAME.desc" onsuccess() { echo "User intervention successful." 1>&2 cat "$DOT_ANNOYME/$NAME.out" EC=0 exit } onfailure() { echo "User intervention failed." 1>&2 EC=1 exit } trap onsuccess SIGUSR1 trap onfailure SIGUSR2 echo "Waiting for user intervention using annoyme" 1>&2 notify-send -a "$NAME" "$NAME: User intervention required" "$2" sleep 3h & SLEEPID=$! wait $SLEEPID echo "User intervention timed out." 1>&2 notify-send -a "$NAME" "$NAME: User intervention request timed out."