अवरुद्ध होने से रोकने के लिए मेरे पास 0-मिनट 0 का स्टेंट -आईकॉन सेट करने के बाद एक लूप है।
यह ठीक काम करता है सिवाय इसके कि यह एंटर / रिटर्न कुंजी नहीं पढ़े।
क्या इस मोड में प्रवेश कुंजी को पढ़ने का कोई तरीका है, या किसी अन्य तरीके से मेरा कोड लिखा जा सकता है?
प्रासंगिक कोड
tput smcup
Draw
if [ -t 0 ]; then stty -icanon time 0 min 0; fi
count=0
keypress=""
while [ "$keypress" != "q" ]; do
sleep 0.1
(( count = count + 1 ))
rows=$(tput lines)
columns=$(tput cols)
Draw
read keypress
name=$name$keypress
echo $name
if [[ $oldcolumns != $columns || $oldrows != $rows ]];then
Draw
oldcolumns=$columns
oldrows=$rows
elif [[ $count -eq 1 ]]; then
# Draw
count=0
fi
done
if [ -t 0 ]; then stty sane; fi
tput rmcup
#rm tail.tmp
echo "Thanks for using this script."
exit 0
उत्तर:
जवाब के लिए 2 № 1आप इसे पढ़कर कर सकते हैं
- परेशान IFS
- किसी भी लाइन सीमांकक का उपयोग नहीं करना
- एक बार में 1 बार पढ़ना
.
IFS= read -t 0.01 -d "" -n1 keypress
उदाहरण के लिए, यहां हम प्रवेश करते हैं ए, अंतरिक्ष, फिर वापसी:
$ IFS = पढ़ें -t 0।01 -s -d "" -n1 keypress; इको "" $ कीपर "" "ए" $ IFS = पढ़ें -t 0.01 -s -d "" -n1 कुंजी; इको "" $ कीपर "" "" $ IFS = पढ़ें -t 0.01 -s -d "" -n1 कुंजी; इको "" $ कीपर "" " " $
मैंने जोड़ा -s
ऊपर दिए गए उदाहरणों में ध्वज को गूंज इनपुट को दबाने के लिए read
, तो यह आउटपुट क्या है यह भ्रमित नहीं करता है। यह ऊपर काम करने के लिए आवश्यक नहीं है।
संपादित करें:
मैंने नहीं किया "टी सराहना की है कि आप प्रभावी रूप से चाहते हैंआपके पढ़ने के लिए गैर-अवरोधक मोड जब तक मैंने आपकी टिप्पणी नहीं देखी। यह कठिन है। सबसे अच्छा मैं समझ सकता हूं कि आपके रीड कमांड में एक छोटा (10msec) टाइमआउट रखा जाए। इससे आपके ईवेंट लूप में 10msec देरी का दुर्भाग्यपूर्ण प्रभाव पड़ता है, जो स्वीकार्य नहीं भी हो सकता है। मेरे लिए, बहुत छोटे टाइमआउट ने बुरी तरह से व्यवहार करने का कारण बना, और एक 0 टाइमआउट doesn "टी काम करने लगते हैं।