जवाबों:
इस मामले में, इसका मतलब है 'मानक इनपुट'। इसका उपयोग कुछ सॉफ्टवेयर द्वारा किया जाता है (जैसे tar) जब एक फ़ाइल तर्क की आवश्यकता होती है और आपको इसके बजाय स्टड का उपयोग करने की आवश्यकता होती है। यह एक शेल निर्माण नहीं है और यह आपके द्वारा उपयोग किए जा रहे प्रोग्राम पर निर्भर करता है। संदेह होने पर मैनपेज की जाँच करें!
इस उदाहरण में, मानक इनपुट -fविकल्प का तर्क है । उन मामलों में जहां -आप समर्थित नहीं हैं, आप कुछ का उपयोग tar xvf /proc/self/fd/0कर tar xvf /dev/stdin( या बाद में विभिन्न यूनियनों में व्यापक रूप से समर्थित हैं) से दूर हो सकते हैं।
सार्वभौमिक रूप से 'मानक इनपुट' का अर्थ करने के लिए इस पर भरोसा न करें। चूंकि यह शेल द्वारा व्याख्या नहीं की गई है, इसलिए प्रत्येक कार्यक्रम इससे निपटने के लिए स्वतंत्र है क्योंकि यह प्रसन्न होता है। कुछ मामलों में, यह मानक आउटपुट या पूरी तरह से अलग है: इस पर su'एक लॉगिन शेल शुरू करें' का संकेत है। अन्य मामलों में, इसकी व्याख्या बिल्कुल नहीं की जाती है। स्नायु स्मृति ने मुझे काफी फ़ाइलों को नाम दिया है -क्योंकि कुछ प्रोग्राम के कुछ संस्करण का उपयोग मुझे डैश को समझने के लिए नहीं किया गया था।
STDOUTसंदर्भ के आधार पर भी हो सकता है।
/dev/stdinया /dev/stdoutयदि आप वास्तव में एक इनपुट / आउटपुट स्ट्रीम चाहते हैं, तो इसका उपयोग किया जा सकता है। ध्यान दें कि यह एक स्ट्रीम है, प्रोग्राम जो किसी फ़ाइल में तलाश करना चाहते हैं वह इसके साथ ठीक से काम नहीं कर सकता है जैसा कि -(जैसे ffmpeg) के साथ होगा
bash, हाइफ़न की व्याख्या शेल द्वारा की जाती है। देखें अध्याय 3. विशेष वर्ण - उन्नत बैश-पटकथा गाइड , फिर "stdin या stdout / से रीडायरेक्शन" पाठ [पानी का छींटा] या के लिए खोज। का उपयोग करके bashआप हाइफ़न का उपयोग कर सकते हैं सबसे अधिक स्थानों पर एक फ़ाइल नाम की उम्मीद है। यह एक स्पष्ट पूरक है <| > IMHO
catहैंडल -(मैनपेज की जांच करें)। catहो सकता है या नहीं का एक शेल-बिल्ट संस्करण हो, लेकिन यह पूरी शेल नहीं है। इसके अलावा, यदि शेल संभाला जाता है -, तो आप कह सकते हैं कि -यह गूंज है और इसका विस्तार कुछ और होगा। इसके बजाय, यह सिर्फ एक डैश (नहीं /dev/stdinया /proc/self/fd/0) echoes । और echo test > -बस एक फ़ाइल बनाई जाती है -, इसलिए यह स्पष्ट रूप से वहां भी नहीं संभालती है। ओह, और आपके द्वारा सूचीबद्ध पृष्ठ यह नहीं कहता है कि यह शेल द्वारा संभाला गया है , यह कहता है कि आप इसका उपयोग कर सकते हैं catऔर diff, दोनों स्पष्ट रूप से समझते हैं।
इस मामले में, -वास्तव में बहुत बेकार है, यह मानते हुए कि आप लिनक्स चला रहे हैं:
जीएनयू टार (लिनक्स पर संस्करण) डिफ़ॉल्ट रूप से मानक इनपुट से अपने इनपुट को स्वीकार करता है। यदि आप इस व्यवहार को नहीं चाहते हैं, और कमांड लाइन तर्क के रूप में फ़ाइल नाम को पास करना चाहते हैं, तो आपको ध्वज को निर्दिष्ट करने की आवश्यकता है f:
tar xf filename
तो यह भी ऐसा ही है
tar x < filename
या, यदि इनपुट आपके उदाहरण के अनुसार gzipped है:
gzip -dc filename | tar x
यह fध्वज को यहाँ निर्दिष्ट करने के लिए सार्थक नहीं है , लेकिन क्योंकि यह निर्दिष्ट किया गया था, फ़ाइल नाम -को यह बताने की आवश्यकता है कि हम मानक इनपुट से पढ़ना चाहते हैं (अन्य उत्तर देखें)। तो, दोहराने के लिए, यह बेमानी और थोड़ा अजीब है।
इसके अलावा, उपरोक्त रेखा को सरल बनाया जा सकता है क्योंकि GNU टार gzipको zझंडे को निर्दिष्ट करके अपने माध्यम से इनपुट को स्ट्रीम करने के लिए कहा जा सकता है :
tar xfz filename
- gzipस्पष्ट रूप से कॉल करने की आवश्यकता नहीं है ।
tarहै zविकल्प।
tarऐतिहासिक कारणों से पहले टेप ड्राइव के लिए डिफ़ॉल्ट है।
/dev/sa0पर ( FreeBSD 9.0, /dev/rst0NetBSD 6.0 और OpenBSD 5.1 पर) डिफ़ॉल्ट हैं । AIX 7.1 के लिए चूक /dev/rmt0। MINIX3 डिफ़ॉल्ट रूप में /dev/sa0। (मैंने प्रत्येक मामले में नवीनतम ओएस संस्करण की जांच की, ये "पुराने मेनफ्रेम" नहीं हैं।) सोलारिस एक फ़ाइल के माध्यम से कॉन्फ़िगर करने योग्य है /etc, जिसमें मुझे लगता है कि एक टेप ड्राइव में चूक। ग्नू टार, शिलिंग टार, ओएसएक्स और बिजीबॉक्स डिफॉल्ट स्टड / स्टडआउट के लिए।
tarलिए डिफ़ॉल्ट रूप से recompiled । :)
-कमांड के अंत में होने की आवश्यकता नहीं है। उदाहरण के लिएls -l | diff - /old_ls_output.txt:।