2012-01-04 19 views
5

में केवल एक वर्ण को कैसे पढ़ा जाए, मुझे सी में getche() जैसे समान विकल्प चाहिए। मैं कमांडलाइन से केवल एक ही अक्षर इनपुट कैसे पढ़ सकता हूं।शैल स्क्रिप्ट

read कमांड का उपयोग करके हम इसे कर सकते हैं?

उत्तर

5

ksh में आप मूल रूप से कर सकते हैं: बैश के लिए

stty raw 
REPLY=$(dd bs=1 count=1 2> /dev/null) 
stty -raw 
12

बैश में, read यह कर सकते हैं:

read -n1 ans 
+0

'0403-010 देता है एक निर्दिष्ट ध्वज इस आदेश के लिए मान्य नहीं है।' त्रुटि। – footy

+0

@footy, bash के बिल्टिन रीड कमांड में -n विकल्प है। आप किस शैल का उपयोग कर रहे हैं? –

+0

@glennjackman ksh shell मैं – footy

7

read -n1 काम करता है

stty raw मोड काम करने से Ctrl-C से बचाता है और आप इनपुट इनपुट लूप में फंस नहीं सकते हैं। इसके अलावा मैन पेज stty -raw को आपके टर्मिनल को उसी स्थिति में वापस करने की गारंटी नहीं है।

तो dtmilano's answer पर stty -icanon -echo का उपयोग करके उन मुद्दों से बचा जाता है।

#/bin/ksh 
## /bin/{ksh,sh,zsh,...} 

# read_char var 
read_char() { 
    stty -icanon -echo 
    eval "$1=\$(dd bs=1 count=1 2>/dev/null)" 
    stty icanon echo 
} 

read_char char 
echo "got $char" 
संबंधित मुद्दे