我想處理用戶輸入,但在後臺,就像在一個新線程中。在後臺處理用戶輸入
例如,顯示一個進度條,並且當用戶點擊- [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