कई कमांड "शांत" विकल्प क्यों प्रदान करते हैं?


37

क्यों कई कमांड विकल्प प्रदान करते हैं -qया --quietआउटपुट को दबाने के लिए जब आप मानक आउटपुट को नल फ़ाइल में पुनर्निर्देशित करके आसानी से एक ही चीज़ प्राप्त कर सकते हैं?


3
मैं ज्यादातर एक सुविधा ध्वज के रूप में विचार करता हूं।
जानिस

7
सभी कमांड सभी आउटपुट -qको दबाने के लिए उपयोग नहीं करते हैं । उदाहरण के लिए, डॉकर के पास छवियों को सूचीबद्ध करने के लिए एक कमांड है; सूचना के एक समूह के साथ एक स्वरूपित तालिका दिखाती है, जबकि छवि आईडी की एक सादे सूची को आउटपुट करती है (अन्य कमांड के लिए पाइपिंग के लिए उपयोगी)। docker imagesdocker images -q
new123456

जवाबों:


71
  • जब आप किसी शेल में आसानी से पुनर्निर्देशित कर सकते हैं, तो अन्य संदर्भ हैं जहां यह उतना आसान नहीं है, जैसे शेल कमांड-लाइन का उपयोग किए बिना किसी अन्य भाषा में कमांड निष्पादित करना। यहां तक ​​कि एक खोल में:

    find . -type f -exec grep -q foo {} \; -printf '%s\n'

    सभी फ़ाइलें शामिल का आकार मुद्रित करने के लिए foo। यदि आप पुनर्निर्देशित करते हैं /dev/null, तो आप दोनों को खो देते हैं findऔर grepआउटपुट देते हैं । आपको इसका सहारा लेना होगा -exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;(वह है, एक अतिरिक्त शेल छिड़कना)।

  • grep -q foo से टाइप करने के लिए कम है grep foo > /dev/null
  • अनुप्रेषित का /dev/nullअर्थ है कि आउटपुट अभी भी लिखा गया है और फिर उसे छोड़ दिया गया है, यह लिखने से कम कुशल है (और आवंटित नहीं किया जाता है, उस आउटपुट को लिखे जाने के लिए तैयार करें)
  • यह और अधिक अनुकूलन की अनुमति देता है। के मामले में grepउदाहरण के लिए, के साथ के बाद से -q, grepजानता है उत्पादन की आवश्यकता नहीं है, यह जैसे ही यह पहला मैच पाता है बाहर निकालता है। इसके साथ grep > /dev/null, यह अभी भी सभी मैचों को खोजने की कोशिश करेगा।
  • चुप का मतलब चुप नहीं है । कुछ आदेशों के लिए, इसका अर्थ है वर्बोसिटी (इसके विपरीत -v|--verbose) को कम करना। उदाहरण के लिए, mplayera --quietऔर a है --really-quiet। कुछ आदेशों के साथ, आप -qqqवर्बोसिटी को 3 गुना कम करने के लिए उपयोग कर सकते हैं ।

यह उल्लेखनीय है कि grepमानव-पृष्ठ दोनों विकल्पों में -q, और -s, यदि पोर्टेबिलिटी एक चिंता का विषय है, तो इससे बचने का सुझाव दिया जाता है। grepजल्दी बाहर निकलना एक महत्वपूर्ण अनुकूलन है, लेकिन ऐसे विकल्पों के साथ सभी कार्यक्रम ऐसा नहीं कर सकते हैं; curl -sअभी भी पूरे डेटा को संसाधित करेगा (लेकिन तीसरा बिंदु अभी भी लागू होता है, इस प्रकार प्रसंस्करण समय की बचत होती है)।
Janis

6
@ जानिस, यह बहुत पुराने सिस्टम के लिए पोर्टेबिलिटी होगी। दोनों -qऔर -sPOSIX द्वारा निर्दिष्ट कर रहे हैं। यदि हम उन प्रणालियों पर विचार कर रहे हैं जो पुरानी हैं, तो मेरा sh -c '...' sh {} \;काम भी नहीं होगा (पहले- kshआधारित shएस के साथ)।
स्टीफन चेजलस

मैन पेज में उल्लेख किया गया है: USG- शैली grep में -q का भी अभाव है, लेकिन इसके विकल्प ने GNU ग्रीप की तरह व्यवहार किया है। - मुझे लगा कि व्यवहार में अंतर एक मुद्दा हो सकता है। मैं इसकी प्रासंगिकता के बारे में फैसला नहीं कर सकता।
Janis

जब मैं केवल स्क्रिप्ट में कमांड के रिटर्न कोड के बारे में परवाह करता हूं, तो मैं -q और -quiet विकल्पों का अक्सर उपयोग करता हूं। ऊपर दिए गए कारण और भी बेहतर उदाहरण हैं।
मार्क स्टीवर्ट

@ स्टीफनचेलजस: आप आश्चर्यचकित होंगे कि कैसे (के) कई सिस्टम अभी भी पुराने हैं ... (ठीक है, वास्तव में, नहीं है कि कई ^ ^ लेकिन अभी भी कुछ कर रहे हैं)
ओलिवियर दुलक

3

यह तब भी कमांड को बाहर निकालने की अनुमति देता है जब उसे लगता है कि इसे स्क्रीन पर नोट करने की आवश्यकता है लेकिन आम तौर पर यह कुछ भी नहीं डालता है। सभी को अशक्त करने के लिए पुनर्निर्देशित करने के लिए आउटपुट को देखने का कोई मौका नहीं है।


खैर, शांत का मतलब है कि कोई प्रतिक्रिया अपेक्षित नहीं है; यह अप्रत्याशित होगा अगर हम वैसे भी आउटपुट देखेंगे। (यदि ऐसा कुछ है तो "वास्तव में वास्तव में वास्तव में" महत्वपूर्ण है जिसे प्रिंट करना महत्वपूर्ण है (टर्मिनल संलग्न प्रक्रिया में) एक tty / pty डिवाइस को सीधे प्रक्रिया द्वारा उपयोग किया जा सकता है। इसके लिए एक उदाहरण पासवर्ड, या सोमेसिक की संवादात्मक जांच हो सकती है। )
जानिस

2

हालाँकि यह संभवतः कमांड पर निर्भर करता है, -qलेकिन आउटपुट को भी अक्षम कर देगा stderr। यह उन गोले की अनुमति देता है जो शोर से बचने के लिए आसानी से स्टॉडर को स्टडआउट (मैं आपको देख रहा हूं, cshऔर tcsh) को अनुमति नहीं देता हूं ।

कुछ कार्यक्रम उन स्थितियों के लिए "शांत" विकल्प प्रदान करते हैं, जहां इसका अन्य सार्थक उत्पादन हो सकता है जो आप स्थिति संदेशों के साथ नहीं चाहते हैं। -qया समकक्ष सभी कार्यक्रम स्थिति उत्पादन मौन हैं, से कहते हैं एक शुद्ध डाटा प्रवाह की अनुमति देता है, tarया gzip


0

उपरोक्त सभी अच्छी प्रतिक्रियाओं और बिंदुओं के अलावा। हर झंडे के लिए एक विपरीत विकल्प प्रदान करना सबसे अच्छा अभ्यास है। तो, अगर वहाँ क्रिया के लिए -v है तो गैर-क्रिया के लिए -q होना चाहिए, काफी या मौन। (यह चर्चा का विषय नहीं है, लेकिन ...) हर लघु, -q और --quite के लिए एक लंबा विकल्प होना चाहिए।

जैसा कि हमारे व्यवसाय में लगभग हर चीज में, समाधान प्राप्त करने के कई तरीके या समान परिणाम हैं। होने -q उनमें से एक है।

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