/ / स्टिक-सिकन का उपयोग करते समय रिटर्न कैसे पढ़ें - बैश, स्टटी

Stty -icanon - bash, stty का उपयोग करते समय वापसी को कैसे पढ़ा जाए

अवरुद्ध होने से रोकने के लिए मेरे पास 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 "टी काम करने लगते हैं।