क्या CTRL + C कमांड लाइन पर लौटने के लिए उपयोग करना गलत है?


27

जब मैं उपयोग कर रहा हूं tail -fऔर मैं शेल पर वापस जाना चाहता हूं, तो मैं हमेशा उपयोग करता हूं CTRL+C। या जब मैं एक कमांड टाइप कर रहा हूं और इसे खत्म करने और शुरू करने जैसा महसूस कर रहा हूं, तो मुझे बस CTRL+Cएक खाली कमांड लाइन प्रॉम्प्ट पर वापस जाना है। क्या यह बुरा अभ्यास माना जाता है? मुझे कभी-कभी लगता है कि किसी चीज़ से नाता तोड़ने का एक बेहतर तरीका हो सकता है, लेकिन वास्तव में इसका कोई पता नहीं है।


6
आंशिक रूप से दर्ज शेल कमांड को रद्द करने के लिए, आप कंट्रोल-यू या डिलीट (अपनी टैटी सेटिंग्स और कुंजी बाइंडिंग के आधार पर) का उपयोग कर सकते हैं, लेकिन कंट्रोल-सी का उपयोग करने में कुछ भी गलत नहीं है।
कीथ थॉम्पसन

@KeithThompson Ctrl + U के लिए धन्यवाद, मुझे उस एक के बारे में पता नहीं था :-)
पैट्रिक

रिकॉर्ड के लिए, Cu वास्तव में दर्ज की गई कमांड को रद्द नहीं करता है , इसे पेस्ट बफर में ले जाता है (कुछ कार्यक्रमों की "कट" कार्यक्षमता के समान)।
क्रिस डाउन

जवाबों:


36

Ctrl+ Cकार्यक्रम के लिए एक संकेत भेजता है। यह उस प्रोग्राम को बताता है जिसे आप बाधित करना चाहते हैं (और अंत) यह प्रक्रिया है। अधिकांश कार्यक्रम सही ढंग से इसे पकड़ते हैं और सफाई से बाहर निकलते हैं। तो, हाँ, यह अधिकांश कार्यक्रमों को समाप्त करने का एक "सही" तरीका है।

कार्यक्रमों में अन्य सिग्नल भेजने के लिए अन्य कीबोर्ड शॉर्टकट हैं, लेकिन यह सबसे आम है।


9
उन प्रोग्राम के लिए Ctrl + D भी है जो उपयोगकर्ता से इनपुट पढ़ रहे हैं। Ctrl + D प्रोग्राम में STDIN को बंद कर देता है। शान से बाहर निकलने के लिए यह भी उपलब्ध है (टाइपिंग निकास के समान ही)।
पैट्रिक

2
@Patrick Ctrl + D वास्तव में स्ट्रीम के लिए फ़ाइल संकेतक का अंत भेजता है। यह उचित रूप से जवाब देने के लिए कार्यक्रम पर निर्भर है (आमतौर पर फ़ाइल स्ट्रीम को बंद करना)।
क्रिस एस

एसटीडीआईएन को बंद करने से जो होता है। आप पाइप / धारा को बंद किए बिना ईओएफ प्राप्त नहीं कर सकते।
पैट्रिक

9
तीन मायने रखता है, पैट्रिक पर गलत। पहला: Control + D का पाइप के लिए यह अर्थ नहीं है। दूसरा: EOF विशेष चरित्र कुछ भी बंद नहीं करता है। यह वर्तमान सिस्टम कॉल से शून्य बाइट्स (लाइन बफ़र खाली है) की एक बार वापसी का कारण बनता है read()। अगले read()एस अप्रभावित हैं। तीसरा: इसमें से कोई भी उन कार्यक्रमों पर लागू नहीं होता है जो गैर-विहित मोड में लाइन अनुशासन को लागू करते हैं, जैसे कि पिछले कुछ दशकों के अधिकांश शेल प्रोग्राम और वास्तव में कोई अन्य प्रोग्राम जो जीएनयू जैसे पुस्तकालय का उपयोग करता है readline
JdeBP


11

टाइप करते समय एक लंबी कमांड को निरस्त करने के लिए, मैं कभी-कभी लाइन शुरू करने के लिए कूदता हूं, और प्रवेश करने से पहले एक टिप्पणी साइन सम्मिलित करता हूं:

Home#Enter

Pos1#Return

यह उपयोगी है, अगर मैंने एक लंबे रास्ते के साथ एक कॉपी कमांड टाइप किया है, उदाहरण के लिए, और इस बीच निरीक्षण करें, कि मुझे पहले निर्देशिका बनाने की आवश्यकता है, लेकिन बाद में कमांड दोहराना चाहते हैं। फिर मुझे बस इसे इतिहास से लेना है, हैश को हटाना है, और दर्ज करना है।

बैश में, आप शॉर्टकट का उपयोग कर सकते हैं

Alt+#

अपने आदेश को टिप्पणी करने के लिए, जैसा कि टिप्पणियों में बताया गया है (धन्यवाद, @Zorawar)।


6
आप Ctrl-Aअपनी उंगलियों को होम रो के बिना भी उपयोग कर सकते हैं ।
डिट्रीच एप

1
और Ctrl-Eअंत तक जाता है, वैसे।
डेव

@Dave: यह सही है, लेकिन आपको अपने आदेश की पुष्टि करने के लिए, एंट्री हिट करने के लिए अंत में जाने की आवश्यकता नहीं है। कमांडलाइन एक संपादक नहीं है, जहां यह एक नई पंक्ति सम्मिलित कर सकता है।
उपयोगकर्ता अज्ञात

2
बैश में आप केवल दबाकर एक ही चीज हासिल कर सकते हैं Alt-#: यह टिप्पणी को डाल देगा और कमांड चलाएगा (इसलिए इसे अपने इतिहास में डालकर)।
जोरावर

8

आम तौर पर बोलना, Ctrl+ Cका उपयोग करना ठीक है जब कार्यक्रम आपको समाप्त करने के लिए कोई इंटरैक्टिव तरीका नहीं देता है (या तो डिजाइन द्वारा, या अधिक बार, क्योंकि यह जमे हुए है या अनुपयोगी हो गया है)। बस यह ध्यान रखें कि, इंटरेक्टिव मोड में, कुंजी कॉम्बो जो आप वास्तव में चाहते हैं Ctrl+ हो सकता है D, जो EOFइनपुट के अंत को इंगित करते हुए, ए भेजता है ।


1

यदि बैश का उपयोग कर रहे हैं, तो कोई भी उपयोग कर सकता है Ctrl- Zऔर bg"वर्तमान नौकरी को पृष्ठभूमि में रखने" के लिए टाइप करें।


0

@Patrick ने स्वीकृत उत्तर पर टिप्पणी में कहा,

ऐसे Ctrl+Dप्रोग्राम भी हैं जो उपयोगकर्ता से इनपुट पढ़ रहे हैं। Ctrl+Dकार्यक्रम में STDIN को बंद कर देता है।

इसने मेरी मदद की जब Ctrl+Cउपयोग करने के बाद कमांड लाइन को वापस लाने के लिए काम नहीं किया>>

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