我想处理用户输入,但在后台,就像在一个新线程中。在后台处理用户输入
例如,显示一个进度条,并且当用户点击- [R,进度条复位,或者如果用户点击Q,脚本退出。
我不希望脚本等待用户输入。只需渲染所有内容,如果用户点击任意键就可以做点什么。
它在bash中是否可行?
在此先感谢。
编辑:我需要剧本,一定要先阅读用户输入,但不中断主要loop.Complicated的执行我让自己在英语
_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:对不起,我最后的评论,在我的编辑
@ user719946您可能需要澄清您要做的事情。如果他们尝试从终端读取,后台作业将被暂停。我得到了一些搜索“bash non-blocking io”的搜索结果,那是你想要做什么的?另外,不需要在主题中加入[bash],标签就足够了。 – Andy 2011-04-22 03:19:14
@andy thx为您的答案。我正在做一些脚本,比如乒乓球比赛。球更新运动是在一个主循环(虽然是真的)。因此,读取输入(移动调色板)会阻止球的移动,因为等待用户敲击任何键。希望你能理解我。对不起[bash]和没有用户名;这是我的第一个问题。 – jotapdiez 2011-04-22 04:21:56