2017-02-01 10 views
5

इंटरप्ट से इनपुट के लिए प्रतीक्षा करते समय Ctrl-C दबाकर टर्मिनल इनपुट छुपाएं read -sp ऑपरेशन वापस कमांड लाइन पर लौटाता है लेकिन इनपुट दिया गया है जैसे कि यह अभी भी read -s चल रहा है।'रीड-एस'

उदाहरण

#!/bin/sh 

sig_handler() { 
    echo "SIGINT received" 
    exit 1 
} 

trap "sig_handler" SIGINT 
read -sp "ENTER PASSWORD: " password 
echo 
echo $password 

जो सामान्य रूप से कार्यान्वित की तरह:

$~ ./example.sh 
ENTER PASSWORD: 
password 
$~ text 
-bash: text: command not found 

लेकिन अगर आप प्रेस Ctrl-C पर पासवर्ड दर्ज आप

$~ ./example.sh 
ENTER PASSWORD: SIGINT received 
$~ -bash: text: command not found 

मिल जहां पाठ या किसी अन्य के लिए निम्न आदेश जब तक आप reset के साथ रीफ्रेश नहीं करते हैं तब तक इनपुट के रूप में प्रदर्शित नहीं होता है।

SIGINT प्राप्त करने के बाद आप सामान्य इनपुट में टेक्स्ट कैसे वापस कर सकते हैं? read -p "ENTER PASSWORD: " password स्पष्ट सुरक्षा कारणों से वांछित नहीं है।

उत्तर

4

अपने सिग्नल हैंडलर को stty sane जोड़ें ताकि वह अपने डिफ़ॉल्ट स्थिति के लिए टर्मिनल पुनर्स्थापित करता है:

sig_handler() { 
    echo "SIGINT received" 
    stty sane 
    exit 1 
} 
+0

यही है दिलचस्प है, मैं stty समझदार और tput RS1 sig_handler में पहले किसी भी बिना जोड़ा को प्रभावित (परीक्षण अब है कि काम करता है) गलती से इसे निकास 1 या कुछ के नीचे रखा होगा। धन्यवाद – Mike