में केवल एक वर्ण को कैसे पढ़ा जाए, मुझे सी में getche()
जैसे समान विकल्प चाहिए। मैं कमांडलाइन से केवल एक ही अक्षर इनपुट कैसे पढ़ सकता हूं।शैल स्क्रिप्ट
read
कमांड का उपयोग करके हम इसे कर सकते हैं?
में केवल एक वर्ण को कैसे पढ़ा जाए, मुझे सी में getche()
जैसे समान विकल्प चाहिए। मैं कमांडलाइन से केवल एक ही अक्षर इनपुट कैसे पढ़ सकता हूं।शैल स्क्रिप्ट
read
कमांड का उपयोग करके हम इसे कर सकते हैं?
ksh में आप मूल रूप से कर सकते हैं: बैश के लिए
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
बैश में, read
यह कर सकते हैं:
read -n1 ans
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"
'0403-010 देता है एक निर्दिष्ट ध्वज इस आदेश के लिए मान्य नहीं है।' त्रुटि। – footy
@footy, bash के बिल्टिन रीड कमांड में -n विकल्प है। आप किस शैल का उपयोग कर रहे हैं? –
@glennjackman ksh shell मैं – footy