#!/bin/sh
# SIGWINCH (28) disturbs "read flow" but is ignored by "sleep"
x=x
p=$$
winChg(){ # home, erase to eol and print size
  printf "\x1b[${t:-3};1H\x1b[0K"
  size="$(stty size)"
  printf "$$: [$e]<$size>$x\n"
  x="x$x"
}

trap 'exit 1' 2 3 6 9 15 # INT QUIT ABRT KILL TERM
trap 'winChg' 28 # SIGWINCH (https://man7.org/linux/man-pages/man7/signal.7.html)
printf '\x1bc' # reset display
winChg

i=0 t=2; printf '\x1b[1;1H----------- while loop --------------------'
while $b; do
  read -p "$((++i)) so1... " &&
  { # block "A"
      b=false; echo "$p: <$REPLY>"
  } ||
  { # block "B"
      e="$?"
      o="o$o"; echo "$$: $o"
  }
done

e= i=0 t=8; printf '\x1b[7;1H----------- read alone --------------------'
read -p "$((++i)) so2... " &&
{ # block "A"
    b=false; echo "$p: <$REPLY>"
} ||
{ # blocck "B"
      e="$?"
    o="o$o"; echo "$$: $o"
}

e= i=0 t=12; printf '\x1b[13;1H----------- short sleep -------------------'
echo -n "$((++i)) so3... " && sleep 20 &&
  { # block "A"
      echo "$p: <OK>"
  } ||
  { # block "B"
      e="$?"
      o="o$o";  echo "$$: $o"
  }

exit 2
