Я хочу обработать пользовательский ввод, но в фоновом режиме, как в новой теме.
Например, показать индикатор выполнения, и когда пользователь нажимает R , индикатор выполнения сбрасывается, или, если пользователь нажимает Q , сценарий завершается.
Я не хочу, чтобы скрипт ждал ввода пользователя. Просто визуализируйте все, и если пользователь нажмет любую клавишу, сделайте что-нибудь.
Это возможно в bash?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Мне нужно, чтобы скрипт ВСЕГДА читал пользовательский ввод, но не прерывал выполнение основного цикла. Сложно Я понимаю по-английски
_handle_keys()
{
read -sn1 a
test "$a" == `echo -en "\e"` || continue
read -sn1 a
test "$a" == "[" || break
read -sn1 a
case "$a" in
C) # Derecha
if [ $PALETTE_X -lt $(($COLUMNS-$PALETTE_SIZE)) ] ; then
PALETTE_X=$(($PALETTE_X+1))
fi
;;
D) # Izquierda
if [ $PALETTE_X -gt 0 ] ; then
PALETTE_X=$(($PALETTE_X-1))
fi
;;
esac
}
render()
{
clear
printf "\033[2;0f BALL (X:${BALL_X} | Y:${BALL_Y})"
_palette_render # Actualiza la paleta
_ball_render
}
while true
do
LINES=`tput lines`
COLUMNS=`tput cols`
render
_handle_keys
done
В моем сценарии шар перемещается (render
> _ball_render
) только при нажатии клавиши, потому что _handle_keys
ждет ввода пользователя.
Я сделал некрасивое решение с read -t0.1
, но мне это не нравится
PD: Извините за мой последний комментарий, время редактирования заканчивается в середине моего редактирования