- #!/usr/bin/ksh93
- #
- # diff watch - interactively watch evolution of file
- #
- # Example usage:
- # $ ./watchdiff.ksh /proc/fs/nfsd/clients/2497/states
- #
- # Written by Roland Mainz <roland.mainz@nrubsig.org>
- #
- function diffvars
- {
- # use nameref here for efficiency
- nameref o=$1
- nameref c=$2
- diff -u \
- <( cat <<<"$o" ) \
- <( cat <<<"$c" ) || true
- }
- function main
- {
- set -o errexit
- set -o nounset
- typeset basefile="$1"
- typeset orig_basefilecontent="$( < "$basefile" )"
- typeset curr_basefilecontent="$orig_basefilecontent"
- integer term_lines
- float ts # timestamp
- typeset usrcmd
- typeset headtailcmd='head'
- for (( ;; )) ; do
- term_lines="$(tput lines)"
- tput clear
- printf $"# %s: Watching file $'%q' in %s mode:\n" \
- "watchdiff.ksh" \
- "${basefile}" \
- "${headtailcmd}"
- curr_basefilecontent="$( < "$basefile" )"
- diffvars orig_basefilecontent curr_basefilecontent 2>&1 | \
- ${headtailcmd} -n $(( term_lines - 3 ))
- for (( ts=SECONDS ; (SECONDS-ts) < 10. ; )) ; do
- while read -n1 -t1 usrcmd ; do
- case "${usrcmd}" in
- $'r') # reload original file
- orig_basefilecontent="$curr_basefilecontent"
- break 2
- ;;
- $' ') # refresh
- break 2
- ;;
- $'h') # use head
- headtailcmd='head'
- break 2
- ;;
- $'t') # use tail
- headtailcmd='tail'
- break 2
- ;;
- $'q' | $'\E') # quit
- break 3
- ;;
- *)
- printf $"Unknown cmd %q\n" "$usrcmd"
- ;;
- esac
- done
- done
- done
- return 0
- }
- # main
- export PATH='/bin:/usr/bin'
- builtin cat
- builtin head
- main "$@"
- exit $?
watchdiff.ksh - watch evolution of a file via diff
Posted by Anonymous on Mon 3rd Jul 2023 15:17
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.