मैं उपयोगकर्ता इनपुट को संभालना चाहता हूं, लेकिन पृष्ठभूमि में, एक नए धागे की तरह।पृष्ठभूमि पर उपयोगकर्ता इनपुट को संभालें
उदाहरण के लिए, एक प्रगति बार दिखाने के लिए, और जब उपयोगकर्ता आर, प्रगति बार फिर सेट करता है मारता है, या उपयोगकर्ता क्यू दबाता है, स्क्रिप्ट बाहर निकालता है।
मैं नहीं चाहता कि स्क्रिप्ट उपयोगकर्ता इनपुट के लिए प्रतीक्षा करे। बस सबकुछ प्रस्तुत करें और यदि उपयोगकर्ता किसी भी कुंजी को हिट करता है तो कुछ करें।
क्या यह बैश में सकारात्मक है?
अग्रिम धन्यवाद।
संपादित करें: मैं स्क्रिप्ट हमेशा पढ़ने के लिए उपयोगकर्ता इनपुट की जरूरत है, लेकिन मुख्य 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
के साथ एक बदसूरत समाधान किया जाता है, लेकिन इस
पीडी पसंद नहीं है: मेरा आखिरी टिप्पणी के लिए क्षमा करें, मेरी संपादन
@ user719946 आपको यह स्पष्ट करने की आवश्यकता हो सकती है कि आप क्या करने का प्रयास कर रहे हैं। अगर वे टर्मिनल से पढ़ने की कोशिश करते हैं तो पृष्ठभूमि नौकरियां निलंबित हो जाएंगी। मुझे "बैश गैर-अवरुद्ध आईओ" के लिए कुछ परिणाम मिल रहे हैं, क्या आप ऐसा करने की कोशिश कर रहे हैं? इसके अलावा, विषय में [bash] डालने की कोई आवश्यकता नहीं है, टैग पर्याप्त है। आपके जवाब के लिए – Andy
@andy thx। मैं एक पोंग गेम की तरह कुछ लिपि कर रहा हूँ। गेंद अद्यतन आंदोलन एक मुख्य पाश में है (जबकि सच करते हैं)। तो, पढ़ा गया इनपुट (पैलेट को ले जाएं) गेंद की गति को अवरुद्ध करें क्योंकि उपयोगकर्ता तब तक प्रतीक्षा करें जब तक उपयोगकर्ता किसी भी कुंजी को दबाए। आशा है आप मुझे समझते हो। [Bash] के लिए खेद है और कोई उपयोगकर्ता नाम नहीं; यह मेरा पहला सवाल है। – jotapdiez