बश में CTRL + 4 (और CTRL + \) क्या करता है?


22

मैं तो बस दुर्घटना से पता चला कि CTRL+ 4 पढ़ने कार्यक्रमों बंद कर देता है stdinकमांड लाइन से इनपुट।

यह इस तरह दिखता है जब मैं पढ़ने वाले कार्यक्रमों में CTRL+ 4या CTRL+ टाइप करता हूं/stdin

$ cat
wefwef
wefwef
^\Quit
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
^\Quit
$

मैं ^\Quitप्रदर्शित होता हूं और फिर कार्यक्रम बंद हो जाता है। उपयोग करने की तुलना में इसका क्या अंतर है ^Cया ^D? क्या करता ^\Quitहै?

संपादित करें : पता चला कि CTRL+ \वही काम करता है।

जवाबों:


37

Ctrl + 4 ^ ^ भेजता है

टर्मिनल वर्ण (या अधिक सटीक बाइट्स) भेजते हैं, कुंजी नहीं। जब एक कुंजी जो एक मुद्रण योग्य चरित्र का प्रतिनिधित्व करती है, उसे दबाया जाता है, टर्मिनल उस चरित्र को आवेदन में भेजता है। अधिकांश फ़ंक्शन कुंजियों को एस्केप अनुक्रम के रूप में एन्कोड किया गया है: वर्णों की अनुक्रम संख्या 27 से शुरू होती है। प्रपत्र Ctrl+ के कुछ कीचर्स characterऔर कुछ फ़ंक्शन कुंजियों को नियंत्रण वर्णों के रूप में भेजा जाता है - ASCII वर्ण सेट में , जो सभी आधुनिक कंप्यूटर एक आधार के रूप में उपयोग करें (यूनिकोड, आईएसओ लैटिन- n, आदि सभी ASCII के सुपरसेट हैं), 33 वर्ण नियंत्रण वर्ण हैं: वर्ण संख्या 0 31 और 127 के माध्यम से। नियंत्रण वर्ण मुद्रण योग्य नहीं हैं, लेकिन अनुप्रयोगों में एक प्रभाव है; उदाहरण के लिए चरित्र 10, जो कंट्रोल-जे (आमतौर पर लिखा गया ^ जे) है, एक नई लाइन वर्ण है, इसलिए जब एक टर्मिनल उस चरित्र को प्रदर्शित करता है, तो यह ग्लिफ़ को प्रदर्शित करने के बजाय कर्सर को अगली पंक्ति में ले जाता है। भागने का चरित्र ही एक नियंत्रण चरित्र है, ^ [(मूल्य 27)।

सभी Ctrl+ characterकीबोर्ड को कवर करने के लिए पर्याप्त नियंत्रण वर्ण नहीं हैं । केवल अक्षरों और वर्णों @[\]^_?में एक ही नियंत्रण वर्ण होता है। जब आप Ctrl+ 4या Ctrl+ दबाते हैं $(जो मुझे लगता है Ctrl+ Shift+ है 4), टर्मिनल को भेजने के लिए कुछ चुनना होगा। टर्मिनल और उसके विन्यास के आधार पर, कई सामान्य संभावनाएं हैं:

  • टर्मिनल Ctrlसंशोधक को अनदेखा करता है और चरित्र भेजता है 4या $
  • टर्मिनल एक भागने का क्रम भेजता है जो सटीक कुंजी और संशोधक को दबाता है जो दबाए गए थे।
  • टर्मिनल कुछ अन्य नियंत्रण चरित्र भेजता है।

कई टर्मिनल अंक पंक्ति में कुछ कुंजियों के लिए नियंत्रण वर्ण भेजते हैं:

  • Ctrl+ 2→ ^ @
  • Ctrl+ 3→ ^ [
  • Ctrl+ 4→ ^ \
  • Ctrl+ 5→ ^]
  • Ctrl+ 6→ ^ ^
  • Ctrl+ 7→ ^ _
  • Ctrl+ 8→ ^

मैं नहीं जानता कि यह विशेष सम्मेलन कहाँ से उत्पन्न हुआ।

Ctrl+ |एक ही वर्ण भेजता है क्योंकि यह Ctrl+ Shift+ है \और टर्मिनल ^ भेजता है \ _ शिफ्ट कुंजी दबाया गया था या नहीं।

^ \ _ क्विट्स

टर्मिनल ही (अधिक सटीक रूप से, कर्नेल में सामान्य टर्मिनल समर्थन) विशेष रूप से कुछ नियंत्रण वर्णों की व्याख्या करता है। इस व्याख्या को विभिन्न वर्णों को मैप करने के लिए कॉन्फ़िगर किया जा सकता है या उन अनुप्रयोगों द्वारा बंद किया जा सकता है जो पात्रों को खुद से संसाधित करना चाहते हैं। एक अच्छी तरह से ज्ञात ऐसी व्याख्या है कि ^ एम, चरित्र Returnकुंजी द्वारा भेजता है, वर्तमान लाइन को एप्लिकेशन को भेजता है, अगर टर्मिनल पका हुआ मोड में है , जिसमें एप्लिकेशन लाइन द्वारा इनपुट लाइन प्राप्त करते हैं।

कुछ वर्ण अग्रभूमि में एप्लिकेशन को संकेत भेजते हैं । ^ सी इंटरप्ट सिग्नल (SIGINT) भेजता है , जो पारंपरिक रूप से एप्लिकेशन को बताता है कि वह क्या कर रहा है और उपयोगकर्ता की अगली कमांड को पढ़ें। गैर-संवादात्मक अनुप्रयोग आमतौर पर बाहर निकलते हैं। ^ \ n सिग्नल छोड़ता है (SIGQUIT), जो पारंपरिक रूप से एप्लिकेशन को बिना कुछ बचाए जल्द से जल्द बाहर निकलने के लिए कहता है; कई एप्लिकेशन डिफ़ॉल्ट व्यवहार को ओवरराइड नहीं करते हैं, जो कि एप्लिकेशन को तुरंत मारना है। इसलिए जब आप Ctrl+ 4(या कुछ भी जो ^ \ वर्ण को भेजता है) को दबाते हैं catया bcजिनमें से कोई भी डिफ़ॉल्ट व्यवहार को ओवरराइड नहीं करता है, तो एप्लिकेशन मारा जाता है।

टर्मिनल स्वयं ^\संदेश का हिस्सा प्रिंट करता है : यह आपके द्वारा टाइप किए गए चरित्र का एक दृश्य चित्रण है, और टर्मिनल पकाया हुआ मोड में है और जैसे ही आप टाइप करते हैं, पात्रों को टर्मिनल द्वारा प्रदर्शित किया जाता है। गैर-प्रतिध्वनि मोड जहां वर्ण केवल एप्लिकेशन को भेजे जाते हैं, जो उन्हें प्रदर्शित करने के लिए चुन सकते हैं या नहीं भी)। यह Quitहिस्सा बैश से आता है: यह ध्यान देता है कि इसकी बच्चे की प्रक्रिया एक छोड़ संकेत से मृत्यु हो गई, और यह आपको बताने का तरीका है।

गोले सभी सामान्य संकेतों को संभालते हैं, ताकि यदि आप शेल में ^ टाइप करते हैं, तो आप अपने सत्र को नहीं मारते हैं, आपको बस एक नया प्रॉम्प्ट मिलता है, उसी तरह ^ सी।

आप sttyकमांड के साथ टर्मिनल सेटिंग्स के साथ खेल सकते हैं ।

Generate और परंपरागत रूप से एक कोर डंप उत्पन्न करता है , लेकिन कई सिस्टम आजकल डिफ़ॉल्ट रूप से अक्षम करते हैं।


SIGINT अग्रभूमि प्रक्रिया समूह को मारता है और SIGQUIT इसे एक कोर डंप के साथ मारता है। दोनों संकेतों को संभाला जा सकता है। मुझे यकीन नहीं है कि अगले आदेश को पढ़ने से आपका क्या मतलब है । सिस्टम कोर कोरपंप को प्रारंभिक coredumpsize सीमा 0 (हार्ड नहीं है, आप आमतौर पर इसे बढ़ाने के लिए स्वतंत्र हैं) की स्थापना के अलावा अन्य को निष्क्रिय नहीं करते हैं।
स्टीफन चेजलस

@ StéphaneChazelas उपयोगकर्ता इंटरैक्शन करता है एक प्रोग्राम में, SIGINT का सामान्य शब्दार्थ वर्तमान उपयोगकर्ता कमांड को रद्द करने और उपयोगकर्ता को प्रोग्राम के साथ बातचीत करने की अनुमति देता है, अर्थात मुख्य कमांड लूप पर वापस जाने के लिए। दूसरी ओर मुझे ऐसा प्रोग्राम देखने की याद नहीं है जहाँ SIGQUIT (सिग्नल हैंडलर में कीड़े को छोड़कर) न जाए। दरअसल जिस तरह से कई सिस्टम डिफॉल्ट रूप से कोर डंप को डिसेबल कर देते हैं, कोर डंप साइज की सॉफ्ट लिमिट को 0 पर सेट करना होता है, जिससे यूजर्स चाहें तो इस डिफॉल्ट सेटिंग को बदल सकते हैं।
गिल्स एसओ- बुराई को रोकना '

वह अपवाद है। SIGINT वर्तमान में चल रहे कार्य को मारता है। केवल कुछ ही एप्लिकेशन विस्तारित करते हैं कि अपने "अग्रभूमि" कार्य को मारने के लिए। आप के बारे में सोच होना चाहिए lessया vim। ध्यान दें कि cmd | less, CTRL-Cआम तौर पर मारता है cmd(जबकि इसके लिए lessवर्तमान कार्रवाई (जैसे खोज) को रद्द करने के लिए नियंत्रित किया जाता है) (जारी)
स्टीफन चेज़लस

मुझे लगता है कि इस संबंध में आपके उत्तर को भ्रमित करने वाला शब्द है। यह तथ्य कि SIGQUIT को आमतौर पर संभाला नहीं जाता है, इसका उपयोग उसी तरह नहीं किया जा रहा है। आप वर्तमान में जो कर रहे हैं उसे निरस्त करने के लिए CTRL-C दबाएं। कोर डंप जनरेट करने के लिए डिबगिंग के लिए आप कभी-कभी ही `CTRL- \` का उपयोग करेंगे। आमतौर पर कोई कारण नहीं है कि कोई एप्लिकेशन आपके तरीके से ऐसा करने की कोशिश करना चाहेगा।
स्टीफन चेज़लस

@ StéphaneChazelas न केवल कम और विम, अधिकांश टर्मिनल-आधारित अनुप्रयोग जो उपयोगकर्ता के आदेशों को पढ़ते हैं। उदाहरण के लिए REPL (बैश, डैश, ksh, zsh, python, irb, fsharpi, Mathematica,…)। यह शायद ही असामान्य है। SIGINT और SIGQUIT को पेंट करने के लिए आपकी पहली टिप्पणी ऑब्जेक्ट्स बहुत अलग है और SIGINT और SIGQUIT पेंटिंग करने के लिए आपकी नवीनतम टिप्पणी ऑब्जेक्ट भी समान है, जो कि आप पर चला रहे हैं के रूप में मुझे हैरान छोड़ देता है।
गिलेस एसओ- बुराई को रोकना '

7

गाइल्स के जवाब के अलावा मुझे जोड़ने दें, कि आप हमेशा Ctrl-v+ key( Ctrl-v+ Ctrl+4इस मामले में) के साथ गैर-प्रिंट करने योग्य वर्णों को इनपुट कर सकते हैं और वर्ण कोड की जांच कर सकते हैं

$ printf '^\' | od -An -tu    # input ^\ as C-v C-4
28

आपको वर्ण का दशमलव कोड मिलता है, जिसे आप फ़ाइल सेपरेटर (FS) केman ascii अनुरूप देख सकते हैं ।


तो ctrl + v क्या करता है? मुझे लगता है कि "क्लिपबोर्ड पेस्ट" किया जा रहा है।
JDługosz

2
@ JDługosz: Ctrl-V टर्मिनल को निम्नलिखित वर्ण की व्याख्या नहीं करने के लिए कहता है । यह एक दुर्भाग्यपूर्ण तथ्य है कि जीयूआई कुंजी संयोजनों ने उन नियंत्रण वर्णों पर कब्जा कर लिया है, जिससे अनावश्यक भ्रम पैदा होता है। ऐसा लगता है कि लिनक्स ने GUI कुंजियों के लिए Alt- [Key] का उपयोग किया था (उदाहरण के लिए कॉपी / पेस्ट के लिए Alt-C / Alt / V), लेकिन तब लोगों को स्पष्ट रूप से ऐसा ही लगता था कि विंडोज अधिक महत्वपूर्ण था; इस बीच मैक उपयोगकर्ताओं को अभी भी उन ऑपरेशनों के लिए Ctrl कुंजी के बजाय कमांड कुंजी का उपयोग करने में कोई समस्या नहीं है।
celtschk

(कम) आदेश है: printf '%d\n' '"^\'?
इसहाक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.