#!/bin/bash cowsaidfile="$(mktemp)" printf "Writing cows to temporary file \"%s\"\\n" \ "$cowsaidfile" cowsay "E T E R N A L" > "$cowsaidfile" trap_exit() { # kill "$cowthreadpid" > /dev/null 2>&1 wait "$cowthreadpid" printf "\\n" cat "$cowsaidfile" rm "$cowsaidfile" } trap trap_exit EXIT # Cow writing thread ( while true; do # Shut up shellcheck; that's the whole point. cowsay does a full read # before it writes back to the file anyway. # shellcheck disable=2094 cowsay -n < "$cowsaidfile" 1<> "$cowsaidfile" done ) & cowthreadpid=$! while true; do # This line will only ever grow larger, so we don't need to clear it # before overwriting it. printf "\\r%s bytes of cowsay; hit Ctrl+C to dump them" \ "$(stat --printf="%s" "$cowsaidfile")" sleep 0.02 done