57 lines
1.4 KiB
Bash
57 lines
1.4 KiB
Bash
|
#!/bin/sh
|
||
|
# name: diff_notify.sh
|
||
|
# desc: monitor a file for changes; then notify the user when it changes
|
||
|
# by default it makes your PC beep a couple times
|
||
|
# lisc: cc0
|
||
|
|
||
|
# FILEPATH -> SHA256_HASH
|
||
|
# get a file's hash, using the proper program
|
||
|
function file_hash {
|
||
|
local file="$1"
|
||
|
local hash="$(sha256sum "$file" 2>/dev/null | awk '{print $1}' 2>/dev/null)"
|
||
|
if test -z "$hash"; then
|
||
|
hash="$(sha256 -q "$file" 2>/dev/null)"
|
||
|
fi
|
||
|
echo "$hash"
|
||
|
}
|
||
|
|
||
|
# NIL -> NIL
|
||
|
# beeps even on systems without the beep command
|
||
|
function true_beep {
|
||
|
if beep 2>/dev/null; then printf '\007\n'; fi
|
||
|
}
|
||
|
|
||
|
# FILEPATH -> NIL
|
||
|
# monitor a file for changes 'till death, notify the user when it changes
|
||
|
function monitor_file {
|
||
|
local file="$1"
|
||
|
local old_hash="$(file_hash "$file")"
|
||
|
local new_hash="$old_hash"
|
||
|
echo "monitoring $file"
|
||
|
while test 1 -eq 1; do
|
||
|
old_hash="$new_hash"
|
||
|
new_hash="$(file_hash "$file")"
|
||
|
if test "$old_hash" != "$new_hash"; then
|
||
|
notify "$file" "$(tail -1 "$file")"
|
||
|
fi
|
||
|
sleep 5
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# HEADER MESSAGE -> ??
|
||
|
# notify the user *somehow*-- depending on what's uncommented
|
||
|
function notify {
|
||
|
local header="$1"
|
||
|
local message="$2"
|
||
|
## As you can tell, there are a bunch of ways to be notified. =w=
|
||
|
# notify-send "$header" "$message"
|
||
|
# zenity --notification --text="$header"
|
||
|
# mpv ~/.notification.ogg
|
||
|
true_beep; true_beep
|
||
|
}
|
||
|
|
||
|
# INVOCATION
|
||
|
# ==================
|
||
|
FILE="$1"
|
||
|
monitor_file "$FILE"
|