इनपुट के साथ कमांड को फीड करने के लिए कुल कितने तरीके हैं?


9

सबसे पहले मैंने देखा कि लिनक्स के बारे में कमांड में डेटा खिलाने के अलग-अलग तरीके थे, मुझे कुछ पता है लेकिन मुझे नहीं पता कि कुल कितने हैं।

मेरे अब तक के तरीके:

पाइपिंग:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

फ़ाइल सिग्नल के अंत वाले कीबोर्ड से:

sort
>gurken
>zucker
>braunkohle

फ़ाइल से:

sort foo

यहां स्ट्रिंग (वास्तव में HERE दस्तावेज कहा जाता है):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

क्या यह सब है या इसे करने के और भी तरीके हैं, क्यों अलग-अलग तरीके हैं, क्या कुछ तरीके बेमानी हैं?

जवाबों:


9

कम से कम निम्नलिखित:

  1. आदेश विकल्प: foo --bar

  2. मानक इनपुट: foo | barयाbar < foo

  3. फ़ाइल (ओं): foo *.*(या खोलने फ़ाइल (फ़ाइलें) कोड के माध्यम से में से foo) †

  4. पर्यावरण निर्यात: export foo=bar; baz

  5. पर्यावरण (निर्यात के बिना): foo=bar bazयाenv foo=bar baz

  6. यहाँ डॉक्टर: foo << EOF bar EOF

  7. यहां स्ट्रिंग: foo <<< bar

  8. सिग्नल kill -SIGUSR1 $procid

  9. इंटर-प्रोसेस संचार की एक पूरी विविधता , जैसे सॉकेट्स, टीसीपी, मेमोरी-मैप्ड फाइलें

Realize हां, मुझे एहसास हुआ कि स्टडिन एक फाइल (या फाइल-लाइक) है। और यह कि फाइलों में इस तरह से गुजरना वास्तव में विकल्पों में पारित होने के समान है


1
आप जोड़ सकते हैं foo < bar(stdin के माध्यम से फाइल) एक अतिरिक्त संस्करण के रूप में
हेगन वॉन Eitzen

14

के साथ शुरू करने के लिए, sort << HEREऔर इसी तरह यहां एक स्ट्रिंग नहीं है। यह एक दस्तावेज है। यहां स्ट्रिंग <<<ऑपरेटर का उपयोग करता है । यह बाश (और कुछ अन्य गोले) में है।

सामान्य तौर पर, दो तरीके हैं। एक मानक इनपुट (और पुनर्निर्देशन) के माध्यम से है, और दूसरा एक पैरामीटर के माध्यम से है।

  1. मानक इनपुट और इसके पुनर्निर्देशन

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

  2. पैरामीटर

    आपके उदाहरण में यही है sort foo। किसी प्रोग्राम या फंक्शन को कॉल करके आप इसे एक या एक से अधिक मापदंडों से पार करते हैं। एक स्थानीय फ़ाइल सिर्फ एक संभावना है। पैरामीटर में एक URL या जो कुछ भी हो सकता है। यहां विकल्प अंतहीन हैं।

योग करने के लिए, दो सामान्य तरीके हैं:

  • अनुप्रयोग के आंतरिक तर्क से पहले एक सार और OS / शेल स्तर पर मानक इनपुट में हेरफेर करता है,

  • जबकि दूसरे में एप्लिकेशन का इनरार्ड शामिल है, और यह वह है जो एक इंटरफेस के रूप में कॉल मापदंडों पर आधारित है, असीम संभावनाओं की पेशकश करता है।

दोनों ही तरीकों से उत्तर की कोई सीमा नहीं है। हालांकि वास्तविक सीमाएँ ओएस / शेल और एप्लिकेशन के साथ ही आती हैं।

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