【发布时间】:2011-08-10 17:42:50
【问题描述】:
我想在后台处理用户输入,就像在新线程中一样。
例如,显示一个进度条,当用户点击R时,进度条重置,或者如果用户点击Q,脚本退出。 p>
我不希望脚本等待用户输入。只需渲染所有内容,如果用户按任意键执行操作。
在 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:对不起,我的最后一条评论,时间编辑在我的编辑中完成
【问题讨论】:
-
@user719946 您可能需要澄清您要做什么。如果后台作业尝试从终端读取,它们将被暂停。我在谷歌搜索“bash non-blocking io”时得到了一些结果,这就是你想要做的吗?另外,主题不用加[bash],tag就够了。
-
@andy 感谢您的回答。我正在做一些像乒乓球游戏一样的脚本。球更新运动在一个主循环中(虽然确实如此)。因此,读取输入(移动调色板)会阻止球的运动,因为要等到用户按下任何键。希望你能理解我。对不起 [bash] 并且没有用户名;这是我的第一个问题。
标签: bash input background