CTRL + C होने पर ^ C निकालें


25

क्या कोई तरीका है ^Cजब आप हिट करते हैं CTRL+ Cशेल में Red Hat Enterprise Linux 6 ("सैंटियागो") शामिल है? मुझे अपना स्वयं का संपादन करने की अनुमति है .bash_profile


4
कोशिशset echo-control-characters off
सुंदरदीप

1
मैंने कोशिश की, लेकिन यह काम नहीं किया
फेड डे गोल्ड

जवाबों:


29

अपनी ~/.inputrcफ़ाइल संपादित करें (या बनाएं) । एक लाइन जोड़ें

set echo-control-characters Off

यह GNU रीडलाइन लाइब्रेरी (जो बैश का उपयोग करता है) को स्क्रीन पर किसी भी नियंत्रण वर्ण को आउटपुट (इको) नहीं करने का निर्देश देगा। इसके बाद सभी नए बैश सत्रों में (और रीडलाइन लाइब्रेरी का उपयोग करने वाली किसी भी अन्य उपयोगिता में) सेटिंग सक्रिय होगी।

ध्यान दें कि यदि आपका यूनिक्स सिस्टम रीडलाइन लाइब्रेरी (आमतौर पर /etc/inputrc) के लिए सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल के साथ आता है , तो आपकी व्यक्तिगत कॉन्फ़िगरेशन फ़ाइल को उस फ़ाइल को शामिल करना होगा:

$include /etc/inputrc
set echo-control-characters Off

एक अन्य विकल्प सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल की एक व्यक्तिगत प्रतिलिपि बनाना और फिर उसे संशोधित करना है।


नमस्ते, मैंने यह और इसके ठीक काम का परीक्षण किया, लेकिन जब मैं एक रनिंग बैश कमांड को बाधित करता हूं तो यह काम नहीं करता, उदाहरण के लिए sleep 180और CTRL + C
rRLdʒɑ

@ टेन-कॉइन यह तभी काम करेगा जब कमांड दुर्भाग्य से रीडलाइन लाइब्रेरी का उपयोग करेगा।
Kusalananda

1
यदि ~/.inputrcपहले से मौजूद नहीं है, तो बस फ़ाइल बनाने से कुछ मौजूदा सेटिंग्स खो सकती हैं। मेरे मामले में मैंने पहली बार देखा कि ctrl + left और ctrl + right ने काम करना बंद कर दिया था। ~/.inputrcइस लाइन से मेरी शुरुआत होनी थी $include /etc/inputrc। यह केवल cp /etc/inputrc .inputrcवांछित के रूप में और संपादित करना भी संभव है ।
कैस्परल्ड

2
@kasperd अच्छी बात! मुझे पता नहीं था कि व्यक्तिगत कॉन्फ़िगरेशन फ़ाइल को जोड़ने से सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल (मेरा सिस्टम एक नहीं है) की रीडिंग को अक्षम कर देगा। मैं अपना जवाब अपडेट करूंगा।
कुसलानंद

20

निम्नलिखित प्रयास करें:

stty -echoctl

स्पष्टीकरण के लिए स्टीफन चेज़लस के इस महान और विस्तृत पोस्ट को देखें जिसमें कुछ अन्य sttyविशेषताएं भी बताई गई हैं

यदि आप उस परिवर्तन को स्थायी बनाना चाहते हैं (और आप bashअपने प्रश्न में निहित हैं) तो यह आपके लिए सबसे अच्छा है कि टिप्पणी में jlmg.bashrc द्वारा नोट किया जाए (इसलिए यह सभी इंटरैक्टिव गोले पर लागू होता है)।


+1 रीडलाइन समाधान के विपरीत, यह टर्मिनल में चलने वाली सभी चीजों के लिए सबसे अधिक काम करना चाहिए।
जोएल

1
किसी को शायद यह उल्लेख करना चाहिए कि यह सभी टर्मिनलों पर काम नहीं करेगा यदि .bash_profileउस फ़ाइल को केवल लॉगिन शेल द्वारा पार्स किया गया है। इसके .bashrcबजाय इसे रखा जाना चाहिए , इसलिए यह सभी इंटरैक्टिव इनवोकेशन द्वारा पढ़ा जाता है।
जोएल

1
क्या यह अभी भी कच्चे 0x03 बाइट को प्रतिध्वनित नहीं करेगा, जिसे सैद्धांतिक रूप से कुछ टर्मिनलों द्वारा व्याख्या किया जा सकता है? इसके साइड इफेक्ट्स भी होंगे यदि आप नॉन-रीडलाइन कमांड चलाने जैसी चीजें करते हैं, तो एक तीर कुंजी दबाने से कर्सर स्क्रीन पर दिखाई ^[[A
देगा

1
@ Random832 +1 तुम सही हो। मुझे लगता है कि सेटिंग केवल बुरी तरह से नामांकित है; यह नियंत्रण वर्णों की प्रतिध्वनि को नियंत्रित नहीं करता है, बल्कि गूँजने से पहले प्रिंट करने योग्य वर्णों के लिए उनके अनुवाद को नियंत्रित करता है। उस दुष्प्रभाव को रोकने के लिए, आपको भी करना होगा stty -echo। निश्चित रूप से यह सब कुछ के रूप में अच्छी तरह से गूंज को रोकने के लिए जा रहा है, जो शायद इस जवाब को एक नो-गो बनाता है यदि आप चाहते थे कि सभी को छिपाना है ^C
जोएल

1
@jlmg अगर ^Cहमेशा अंत में मैं आपसे सहमत हो सकता था। लेकिन उस ^Cवसीयत को प्रिंट किया जाएगा जहां कभी कर्सर था, जो कमांड में कहीं भी एक जोड़ी अक्षर को ओवरराइट कर सकता है। इसका मतलब है कि अगर आपको उस आदेश के कुछ हिस्सों को कॉपी-पेस्ट करने की आवश्यकता है, तो आप कुछ गड़बड़ कर सकते हैं। और ^Cटर्मिनल को देखते समय आसानी से पहचाना नहीं जाता है जैसे कि यह कमांड के अंत में होता है।
कास्परड

2

यदि आप ऐसा कॉन्फ़िगरेशन ढूंढने का प्रयास कर रहे हैं, जो सामान्य इकोलिंग (सहित echoctl) की अनुमति देगा और सिगनल-जनरेटिंग वर्णों की गूँज को शांत करेगा, और आपको यकीन है कि यह संभव होना चाहिए, क्योंकि आपने इसे इस तरह से पहले देखा है ...

आपने शायद इसे इस तरह से देखा हो। लेकिन यह अब संभव नहीं है, क्योंकि यह प्रतिबद्ध है :

प्रतिबद्ध ec5b1157f8e819c72fc93aa6d2d5117c08cdc961

N_TTY लाइन अनुशासन (जैसे ctrl-C "के रूप में दिखाई देगा INTR / QUIT / SUSP को चालू करें (यदि stty echoctl सेट किया गया है और ctrl-C INTR के रूप में सेट है)।

लिनक्स केवल यूनिक्स जैसा ओएस प्रतीत होता है (हाल ही में मैंने सोलारिस, बीएसडी और मैक ओएस एक्स पर इसे सत्यापित किया है) जो इस तरह से व्यवहार नहीं करता है , और मैं वास्तव में इसे एक कार्यक्रम के बीच की एक अच्छी दृश्य पुष्टि के रूप में याद करता हूं कंसोल या xterm में। मुझे याद है यह उन कई यूनिक्स से है जो मैंने वर्षों से उपयोग किए हैं। इसे लिनक्स में लाना भी एक अच्छा तरीका लगता है, जो इसे मानक यूनिक्स जैसे व्यवहार के साथ और अधिक अनुरूप बनाता है।

तुम्हें याद प्यार से कैसे लिनक्स का उपयोग किया है करने के लिए नहीं है कि गूंज ^C, पुराने व्यवहार वापस पाने के लिए एक ही रास्ता अपने कर्नेल पैच करने के लिए है। हाल के संस्करणों में, सिग्नल-जनरेटिंग कैरेक्टरों की गूंज 1215-1218 ड्राइवरों / tty / n_tty.c की तर्ज पर है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.