Eu posso ter encontrado uma solução alternativa ... Mas também espero que alguém dê algo melhor.
Código corrigido: oculto o eco normal e faço um eco a cada leitura:
stty_orig='stty -g' ### added this
stty -echo ### added this
_delay_end_input_=2
printf "%s\n" "answer: "
IFS= read -d '' -n 1 theanswer
printf "$theanswer" >&2 ; ### added this
while IFS= read -d '' -n 1 -t ${_delay_end_input_} more ; do
printf "$more" >&2 ; ### added this
theanswer="${theanswer}${more}"
done
stty $stty_orig ### added this
Parece até agora fazer tudo o que eu precisava ... Mas eu não gosto de imprimir para stderr dessa maneira ... (talvez seja melhor imprimir em / dev / tty em vez disso?)
edit : uma desvantagem grande é difícil de lidar com "backspaces" ou dels: se a pessoa que digitar 1 ou várias linhas de texto quiser alterar alguma coisa, muito peludo para interpretar as chaves corretivas ... Ter uma readline permitindo 1 ou várias linhas de entrada seria a melhor aqui ... (talvez perl tenha uma?)