Eu suspeito que há algo de bobo na forma como o script aguarda por uma ação do usuário e / ou um sinal. Observe que get_window_size
chama show_menu
, que é o que aguarda a entrada do usuário ( read _ANS
).
O comando trap
também faz com que get_window_size
seja chamado pelo SIGWINCH. Não sei se as funções do shell são reentrantes ou não.
Minhas expectativas de como o SIGWINCH deve ser gerado, e quando a função de armadilha deve ser executada, são basicamente as mesmas que as suas. Eu cortei o script de exemplo um pouco, e fiz isso não reentrante. Veja abaixo.
Você também pode considerar tentar seu script com um gerenciador de janelas diferente. Eu usei o venerável, rápido e altamente configurável twm
no meu experimento.
#!/bin/bash
trap 'get_window_size' WINCH # trap when a user has resized the window
get_window_size() {
_WINDOW_X='tput lines'
_WINDOW_Y='tput cols'
echo "X: $_WINDOW_X"
echo "Y: $_WINDOW_Y"
return 0
}
while read ALINE
do
echo "Read: '$ALINE'"
done