#!/bin/bash # # Skrypt sluzy do przypominania o roznych dziwnych rzeczach. Przeznaczony jest # dla ludzi siedzacych bez przerwy pod konsola (zadeklarowani X-owcy maja mase # innych programow, choc dodalem prosty skrypcik Tk). Caly skrypt jest # wykonywany w nawiasie okraglym, za ktorym stoi ampersand - wszystko po to, # zeby skrypt nie blokowal terminala, na ktorym zostal odpalony. Po uplywie # przewidzianego czasu na wszystkich konsolach zostanie wypisany na czerwono # tekst przypomnienia wraz z aktualna godzina. # # BURAKI: skrypt nie dziala do konca ladnie przy odpalonym mc na terminalu, # aczkolwiek daje sie toto odczytac. # # INSTALACJA: skopiuj ten plik dokadkolwiek, byle to miejsce bylo przegladane # podczas szukania polecen (niezlym pomyslem jest ~/bin/), a potem nadaj temu # plikowi atrybuty wykonywalnosci poleceniem "chmod a+x remindme". # To wszystko. # # tekst pomocy - jakis zawsze musi byc if [ $# = 0 -o "$1" = "--help" -o "$1" = "-h" -o "$1" = "-?" ]; then echo -n "Uzycie: "`basename "$0"` echo " [-x] [-c] [ tekst przypomnienia ]" echo "czas - za ile przypomniec" echo "godzina - o ktorej przypomniec" echo "-x - przypomina wyskakujac okienkiem w X-Window" echo "-c - _nie_ przypomina w konsoli" exit 0 fi # chce, zeby skrypt zwrocil sterowanie do powloki, wiec odpalam go # w podpowloce i w tle ( while [ $# -gt 0 ]; do case "${1%[hms]}" in -x) PRZYPOMNIJ_W_X11=1 ;; -c) NIE_PRZYPOMINAJ_W_KONSOLI=1 ;; *[^0-9:/]*) TEKST_PRZYPOMNIENIA="$TEKST_PRZYPOMNIENIA $1" ;; *) # [0-9]+ # ustalamy, ile mamy spac - czas spania musi byc pierwszym argumentem if echo "$1" | grep '[:/]' &> /dev/null; then # przypadek 1: podano konkretna godzine (zawiera : albo / [dla # leniwych ;] ]) CZAS_SPANIA=$[ `date -d "$1" +%s` - `date +%s` ] else # przypadek 2: podano czas, za jaki mamy sie przypomniec CZAS_SPANIA="$1" fi # jesli uzyszkodnik podal ujemny czas oczekiwania (ew. wczesniejsza # godzine) albo pierwszy argument nie byl czasem, to nie czekamy if [ "${CZAS_SPANIA%[hms]}" -le 0 -a ! "${CZAS_SPANIA%[hms]}" = "0" ]; then echo "Za maly czas do odczekania" exit 0 fi ;; esac shift done # spimy odpowiednia ilosc czasu, po czym sie przypomnimy sleep "$CZAS_SPANIA" # jesli nie uzyszkodnik nie podal, czym mamy go obudzic, to zbudzimy go # standardowym tekstem [ -z "$TEKST_PRZYPOMNIENIA" ] && TEKST_PRZYPOMNIENIA="Przypominam!!!" # bierzemy wszystkie urzadzenia /dev/tty... (ale te z numerkami, zeby na COM-y # nie wysylac danych) i wszystkie urzadzenia /dev/pts/... (terminale # wirtualne), sprawdzamy, ktore sa nasze, po czym wypisujemy na czerwono # aktualny czas i komunikat (przepuszczony przez unix2dos, bo terminal pod # cursesami, na ktory ida dane z zewnatrz, potrzebuje sekwencji CR+LF, zeby # sie toto ladnie wyswietlalo - sprawdzone doswiadczalnie ;) ) if [ "$NIE_PRZYPOMINAJ_W_KONSOLI" != "1" ]; then for TTY in `ls -l /dev/tty[0-9]* /dev/pts/* 2> /dev/null | grep "$USER" \ | grep -v /dev/tty0 | awk '{print $NF}'`; do echo -e "\e[31;1m\r`date '+%k:%M'`\n$TEKST_PRZYPOMNIENIA\e[0m" \ | sed 's/$/ /' > "$TTY" done fi # niedlugi skrypcik w Tk, wyskakujacy okienkiem if [ "$PRZYPOMNIJ_W_X11" = "1" ] && which wish > /dev/null; then # jakby komus przyszlo do glowy wrzucac do tekstu przypominajacego '"' TEKST_PRZYPOMNIENIA="`echo "$TEKST_PRZYPOMNIENIA" | sed 's/"/\\\\"/g'`" echo "set tekst \"[ exec date +%k:%M: ] $TEKST_PRZYPOMNIENIA\" label .etykieta -text \"\$tekst\" button .przycisk -text OK -command \"exit 0\" -default active -state active pack .etykieta .przycisk # zakomentowane, bo ja jestem za szybki i czesto wciskam spacje nawet nie # zdazywszy przeczytac komunikatu #focus .przycisk event add <> event add <> event add <> bind . <> \"exit 0\"" | wish -name "Remindme" &> /dev/null fi ) &