राख - लिनक्स कमांड - यूनिक्स कमांड

नाम

श - कमांड दुभाषिया ( खोल )

SYNOPSIS

sh [- / + aCefnuvxIimqsVEbc ] [- o longname ] -words [ target ... ]

विवरण

एस सिस्टम के लिए मानक कमांड दुभाषिया है। शेल का वर्तमान संस्करण शेल के लिए POSIX 1003.2 और 1003.2a विनिर्देशों के अनुरूप बदलने की प्रक्रिया में है। इस संस्करण में कई विशेषताएं हैं जो इसे कॉर्न शैल के कुछ मामलों में समान दिखती हैं, लेकिन यह कॉर्न शैल क्लोन नहीं है (देखें ksh (1))। POSIX और कुछ बर्कले एक्सटेंशन द्वारा नामित केवल सुविधाओं को इस खोल में शामिल किया जा रहा है। हम 4.4 बीएसडी जारी किए जाने तक पॉज़िक्स अनुरूपता की उम्मीद करते हैं। यह मैन पेज ट्यूटोरियल या खोल का पूर्ण विनिर्देश नहीं है।

अवलोकन

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

मंगलाचरण

यदि कोई तर्क मौजूद नहीं है और यदि खोल का मानक इनपुट किसी टर्मिनल से जुड़ा हुआ है (या यदि - I ध्वज सेट है), और - सी विकल्प मौजूद नहीं है, तो खोल को एक इंटरैक्टिव खोल माना जाता है। एक इंटरेक्टिव शैल आम तौर पर प्रत्येक कमांड से पहले संकेत देता है और प्रोग्रामिंग और कमांड त्रुटियों को अलग-अलग करता है (जैसा कि नीचे वर्णित है)। जब पहली बार शुरू होता है, तो खोल तर्क 0 का निरीक्षण करता है, और यदि यह एक डैश '-' खोल से शुरू होता है तो खोल को लॉगिन खोल भी माना जाता है। यह आमतौर पर सिस्टम द्वारा स्वचालित रूप से किया जाता है जब उपयोगकर्ता पहले लॉग इन करता है। एक लॉगिन खोल पहले फाइलों / etc / profile से कमांड पढ़ता है और यदि वे मौजूद हैं तो प्रोफाइल। यदि पर्यावरण परिवर्तनीय ENV को खोल में प्रविष्टि पर सेट किया गया है, या लॉगिन शेल के .profile में सेट किया गया है, तो खोल अगले एनएनवी में नाम की फ़ाइल से कमांड पढ़ता है, इसलिए उपयोगकर्ता को केवल उन आदेशों को रखना चाहिए जिन्हें निष्पादित किया जाना है .profile फ़ाइल में लॉगिन समय, और एनएनवी फ़ाइल के अंदर प्रत्येक खोल के लिए निष्पादित आदेश। ENV चर को किसी फ़ाइल में सेट करने के लिए, अपनी होम निर्देशिका के अपने .profile में निम्न पंक्ति रखें

ENV = $ घर / .shinit; निर्यात ENV

आपके द्वारा इच्छित किसी भी फ़ाइल नाम ``shinit '' के लिए प्रतिस्थापन। चूंकि एनएनवी फ़ाइल खोल के प्रत्येक आमंत्रण के लिए पढ़ा जाता है, जिसमें शैल स्क्रिप्ट और गैर-इंटरैक्टिव शैल शामिल हैं, निम्नलिखित प्रतिमान एनएनवी फ़ाइल में इंटरैक्टिव इनवोकेशन में कमांड को प्रतिबंधित करने के लिए उपयोगी है। नीचे दिए गए `` case '' और ' esac ' 'के भीतर आदेश रखें (इन आदेशों को बाद में वर्णित किया गया है):

मामले $ - में * i *)

# केवल इंटरैक्टिव उपयोग के लिए आदेश

...

esac

यदि विकल्पों के अलावा कमांड लाइन तर्क निर्दिष्ट किए गए हैं, तो खोल पहले तर्क को फ़ाइल के नाम के रूप में मानता है जिसमें से कमांड (एक खोल स्क्रिप्ट) पढ़ने के लिए, और शेष तर्क खोल के स्थितित्मक पैरामीटर के रूप में सेट किए जाते हैं ($ 1 , $ 2, आदि)। अन्यथा, खोल अपने मानक इनपुट से कमांड पढ़ता है।

तर्क सूची प्रसंस्करण

सभी एकल अक्षरों के विकल्पों में एक समान नाम होता है जिसे विकल्प के लिए तर्क के रूप में उपयोग किया जा सकता है। सेट- नाम नीचे दिए गए विवरण में एकल अक्षर विकल्प के बगल में प्रदान किया जाता है। प्लस `` + 'का उपयोग करते समय विकल्प को अक्षम करता है,' '' - '' विकल्प को बदलता है। निम्न विकल्पों को कमांड लाइन से या सेट (1) बिल्टिन (बाद में वर्णित) से सेट किया जा सकता है।

-ए Allexport

असाइन किए गए सभी चर निर्यात करें। (4.4alpha के लिए संयुक्त)

-सी

कमांड लाइन से कमांड पढ़ें। मानक इनपुट से कोई आदेश नहीं पढ़ा जाएगा।

-सी noclobber

मौजूदा फाइलों को '`>' के साथ ओवरराइट न करें (4.4alpha के लिए संयुक्त)

- errexit

यदि इंटरैक्टिव नहीं है, तो कोई अनचाहे कमांड विफल होने पर तुरंत बाहर निकलें। कमांड के बाहर निकलने की स्थिति को स्पष्ट रूप से परीक्षण किया जाता है यदि कमांड का इस्तेमाल किसी एलीफ को नियंत्रित करने के लिए किया जाता है या जब तक या कमांड '`&&' 'या` `||' ऑपरेटर का बायां हाथ ऑपरेंड होता है।

-फ नोग्लोब

पथनाम विस्तार अक्षम करें।

-नहीं कोई नहीं

यदि इंटरैक्टिव नहीं है, तो आदेश पढ़ें लेकिन उन्हें निष्पादित न करें। यह शैल स्क्रिप्ट के वाक्यविन्यास की जांच के लिए उपयोगी है।

-यू संज्ञासेट

सेट किए गए चर को विस्तारित करने का प्रयास करते समय मानक त्रुटि के लिए एक संदेश लिखें, और यदि खोल इंटरैक्टिव नहीं है, तो तत्काल बाहर निकलें। (4.4alpha के लिए संयुक्त)

-v verbose

शेल मानक इनपुट में अपना इनपुट लिखता है क्योंकि इसे पढ़ा जाता है। डिबगिंग के लिए उपयोगी।

-x xtrace

प्रत्येक आदेश को मानक त्रुटि में लिखें (पहले इसे निष्पादित करने से पहले '+' से पहले। डीबगिंग के लिए उपयोगी।

-एक शांत प्रोफाइल

यदि - v या - x विकल्प सेट किए गए हैं, तो प्रारंभिक फ़ाइलों को पढ़ने के दौरान उन्हें लागू न करें, ये / etc / profile .profile और ENV पर्यावरण चर द्वारा निर्दिष्ट फ़ाइल है।

मैं अनदेखा करता हूं

इंटरैक्टिव होने पर इनपुट से ईओएफ को अनदेखा करें।

-आई इंटरैक्टिव

खोल को बलपूर्वक व्यवहार करने के लिए मजबूर करें।

-एम मॉनीटर

नौकरी नियंत्रण चालू करें (इंटरैक्टिव होने पर स्वचालित रूप से सेट करें)।

-एस stdin

मानक इनपुट से कमांड पढ़ें (यदि कोई फ़ाइल तर्क मौजूद नहीं है तो स्वचालित रूप से सेट करें)। इस विकल्प का कोई प्रभाव नहीं पड़ता है जब खोल खोलने के बाद सेट हो चुका है (यानी सेट (1) के साथ)।

-वी वीआई

अंतर्निर्मित vi (1) कमांड लाइन संपादक सक्षम करें (अक्षम करता है - यदि यह सेट किया गया है)।

-ई emacs

अंतर्निहित emacs (1) कमांड लाइन संपादक सक्षम करें (अक्षम करता है - वी अगर इसे सेट किया गया है)।

-बी सूचित करें

पृष्ठभूमि नौकरी पूर्ण होने की एसिंक्रोनस अधिसूचना सक्षम करें। (4.4alpha के लिए संयुक्त)

लेक्सिकल संरचना

खोल फ़ाइल से लाइनों के संदर्भ में इनपुट पढ़ता है और इसे व्हाइटस्पेस (रिक्त स्थान और टैब) पर शब्दों में विभाजित करता है, और 'ऑपरेटर' नामक खोल के लिए विशेष वर्णों के कुछ अनुक्रमों पर तोड़ता है, दो प्रकार के ऑपरेटर होते हैं: नियंत्रण ऑपरेटर और पुनर्निर्देशन ऑपरेटर (उनके अर्थ बाद में चर्चा की जाती है)। ऑपरेटरों की एक सूची निम्नलिखित है:

"नियंत्रण ऑपरेटर:"

& && (); ;; | || <न्यू लाइन>

"पुनर्निर्देशन ऑपरेटर:"

<>> | << >> <&> और << - <>

का हवाला देते हुए

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

बैकस्लैश

एसी न्यूलाइन के अपवाद के साथ, बैकस्लैश निम्न वर्ण के शाब्दिक अर्थ को संरक्षित करता है। एक एसीसी न्यूलाइन से पहले एक बैकस्लैश को लाइन निरंतरता के रूप में माना जाता है।

एकल कोट

एकल उद्धरणों में वर्णों को घेरना सभी पात्रों के शाब्दिक अर्थ को संरक्षित करता है (एकल उद्धरण को छोड़कर, एकल-उद्धरण वाली स्ट्रिंग में सिंगल-कोट्स रखना असंभव बना देता है)।

डबल उद्धरण

डबल कोट्स के भीतर वर्णों को बंद करने से डॉलररिन ($) बैकक्वोट (`) और बैकस्लैश (\) को छोड़कर सभी वर्णों के शाब्दिक अर्थ को संरक्षित किया जाता है। डबल कोट्स के अंदर बैकस्लैश ऐतिहासिक रूप से अजीब है, और केवल निम्न वर्णों को उद्धृत करने में कार्य करता है:

$ `\

अन्यथा यह शाब्दिक रहता है।

सुरक्षित शब्द

आरक्षित शब्द ऐसे शब्द होते हैं जिनके पास खोल के लिए विशेष अर्थ होता है और एक लाइन की शुरुआत में और नियंत्रण ऑपरेटर के बाद पहचाने जाते हैं। निम्नलिखित आरक्षित शब्द हैं:

! ता एलीफ ता फा ता ता ता के दौरान

ता Ta के लिए ता ता ता ता ता

Ta Taac Ta Ta Ta ता Ta

उनके अर्थ पर बाद में चर्चा की गई है।

उपनाम

उपनाम उपनाम (1) बिल्टिन कमांड का उपयोग कर एक नाम और संबंधित मान सेट है। जब भी एक आरक्षित शब्द हो सकता है (ऊपर देखें), और आरक्षित शब्दों की जांच करने के बाद, खोल शब्द को जांचता है कि यह उपनाम से मेल खाता है या नहीं। यदि ऐसा होता है, तो यह इनपुट प्रवाह में इसके मूल्य के साथ बदल देता है। उदाहरण के लिए, यदि `` ls -F 'मान के साथ' `lf '' नामक उपनाम है तो इनपुट:

एलएफ foobar <वापसी>

बन जाएगा

ls -F foobar <वापसी>

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

आदेश

शेल शब्दों को एक भाषा के अनुसार पढ़ता है, जिसका विनिर्देश इस मैन पेज के दायरे से बाहर है ( POSIX 1003.2 दस्तावेज़ में बीएनएफ देखें)। अनिवार्य रूप से, एक पंक्ति पढ़ी जाती है और यदि रेखा का पहला शब्द (या नियंत्रण ऑपरेटर के बाद) एक आरक्षित शब्द नहीं है, तो खोल ने एक साधारण कमांड को पहचाना है। अन्यथा, एक जटिल कमांड या कुछ अन्य विशेष निर्माण को पहचाना जा सकता है।

सरल आदेश

यदि एक साधारण आदेश पहचाना गया है, तो खोल निम्नलिखित क्रियाएं करता है:

  1. '`Name = value' 'फ़ॉर्म के प्रमुख शब्द छीन दिए गए हैं और सरल कमांड के वातावरण को सौंपा गया है। पुनर्निर्देशन ऑपरेटर और उनके तर्क (जैसा कि नीचे वर्णित है) को हटा दिया गया है और प्रसंस्करण के लिए सहेजा गया है।
  2. शेष शब्द का विस्तार '' विस्तार '' नामक अनुभाग में वर्णित किया गया है और पहले शेष शब्द को कमांड नाम माना जाता है और कमांड स्थित होता है। शेष शब्दों को कमांड के तर्क माना जाता है। यदि कोई कमांड नाम नहीं हुआ है, तो आइटम 1 में पहचाने गए `` name = value '' वेरिएबल असाइनमेंट वर्तमान खोल को प्रभावित करते हैं।
  3. अगले खंड में वर्णित अनुसार पुनर्निर्देशन किए जाते हैं।

पुनर्निर्देशन

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

[एन] redir-op फ़ाइल

जहां रेडिर-ओप पहले वर्णित पुनर्निर्देशन ऑपरेटरों में से एक है। संभावित पुनर्निर्देशन की एक सूची निम्नलिखित है। बीक एन एक वैकल्पिक संख्या है, जैसा कि '3' ('बीक 3' नहीं है जो फ़ाइल डिस्क्रिप्टर को संदर्भित करता है।

[एन]> फाइल

फ़ाइल आउटपुट (या एन) को रीडायरेक्ट करने के लिए।

[एन]> | फ़ाइल

वही, लेकिन सी विकल्प को ओवरराइड करें।

[एन] >> फाइल

फाइल करने के लिए मानक आउटपुट (या एन) संलग्न करें।

[एन] <फाइल

फ़ाइल से मानक इनपुट (या एन) को पुनर्निर्देशित करें।

[एन 1] <& n2

फ़ाइल डिस्क्रिप्टर n2 से डुप्लिकेट मानक इनपुट (या n1)।

[एन] <& -

मानक इनपुट बंद करें (या एन)।

[एन 1]> और एन 2

एन 2 से मानक आउटपुट (या एन 1) डुप्लिकेट करें।

[एन]> और -

मानक आउटपुट बंद करें (या एन)।

[एन] <> फ़ाइल

मानक इनपुट (या एन) पर पढ़ने और लिखने के लिए फ़ाइल खोलें।

निम्नलिखित पुनर्निर्देशन को अक्सर 'यहां दस्तावेज़' कहा जाता है।

[एन] << डेलीमीटर

यहां-डॉक-पाठ ...

सीमांकक

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

खोज और निष्पादन

तीन प्रकार के कमांड हैं: शैल फ़ंक्शंस, बिल्टिन कमांड, और सामान्य प्रोग्राम - और आदेश उस क्रम में (नाम से) के लिए खोजा जाता है। वे प्रत्येक एक अलग तरीके से निष्पादित होते हैं।

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

शैल बिल्टिन को एक नई प्रक्रिया के बिना आंतरिक रूप से खोल में निष्पादित किया जाता है।

अन्यथा, यदि कमांड नाम किसी फ़ंक्शन या बिल्टिन से मेल नहीं खाता है, तो कमांड को फाइल सिस्टम में सामान्य प्रोग्राम के रूप में खोजा जाता है (जैसा कि अगले खंड में वर्णित है)। जब एक सामान्य प्रोग्राम निष्पादित किया जाता है, तो शैल कार्यक्रम चलाता है, कार्यक्रम के लिए तर्क और पर्यावरण को पारित करता है। यदि कार्यक्रम सामान्य निष्पादन योग्य फ़ाइल नहीं है (यानी, यदि यह "जादू संख्या" से शुरू नहीं होता है जिसका एएससीआईआई प्रतिनिधित्व "#!" है, तो निष्पादित करें (2) तब एर ईनोएक्सईसी लौटाता है) खोल प्रोग्राम में व्याख्या करेगा subshell। बच्चे के खोल इस मामले में खुद को फिर से शुरू कर देंगे, ताकि प्रभाव इस तरह होगा जैसे विज्ञापन-शॉक स्क्रिप्ट स्क्रिप्ट को संभालने के लिए एक नया खोल लगाया गया था, सिवाय इसके कि पैरेंट खोल में स्थित हैश किए गए आदेशों का स्थान याद किया जाएगा बच्चे।

ध्यान दें कि इस दस्तावेज़ के पिछले संस्करण और स्रोत कोड स्वयं भ्रामक रूप से और स्पोरैडिक रूप से "शैल प्रक्रिया" के रूप में जादू संख्या के बिना एक शेल स्क्रिप्ट का संदर्भ लेते हैं।

पथ खोज

कमांड का पता लगाने पर, शेल सबसे पहले देखता है कि उसके नाम पर एक शेल फ़ंक्शन है या नहीं। फिर यह उस नाम से एक निर्मित कमांड की तलाश में है। यदि एक बिल्टिन कमांड नहीं मिला है, तो दो चीजों में से एक होता है:

  1. स्लैश युक्त कमांड नामों को बिना किसी खोज किए निष्पादित किया जाता है।
  2. शेल कमांड के बदले में प्रत्येक प्रविष्टि को पाथ में खोजता है। पाथ चर के मूल्य को कोलन द्वारा अलग प्रविष्टियों की एक श्रृंखला होना चाहिए। प्रत्येक प्रविष्टि में एक निर्देशिका नाम होता है। वर्तमान निर्देशिका को खाली निर्देशिका नाम से स्पष्ट रूप से इंगित किया जा सकता है, या स्पष्ट रूप से एक अवधि के द्वारा।

आदेश से बाहर निकलें स्थिति

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

कॉम्प्लेक्स कमांड्स

कॉम्प्लेक्स कमांड कंट्रोल ऑपरेटर या आरक्षित शब्दों के साथ सरल कमांड के संयोजन होते हैं, साथ ही साथ एक बड़ा जटिल कमांड बनाते हैं। अधिक आम तौर पर, कमांड निम्न में से एक है:

जब तक अन्यथा कहा न जाए, तो आदेश के बाहर निकलने की स्थिति कमांड द्वारा निष्पादित अंतिम सरल आदेश का है।

पाइपलाइन

एक पाइपलाइन नियंत्रण ऑपरेटर द्वारा अलग किए गए एक या अधिक कमांड का अनुक्रम है। अंतिम आदेश के अलावा सभी का मानक आउटपुट अगले कमांड के मानक इनपुट से जुड़ा हुआ है। अंतिम आदेश का मानक आउटपुट शेल से सामान्य रूप से विरासत में मिलता है।

पाइपलाइन के लिए प्रारूप है:

[!] कमांड 1 [| कमांड 2 ...]

कमांड 1 का मानक आउटपुट कमांड 2 के मानक इनपुट से जुड़ा हुआ है। मानक इनपुट, मानक आउटपुट, या दोनों कमांड को पाइपलाइन द्वारा असाइन किया जाता है, जो कि आदेश के भाग वाले पुनर्निर्देशन ऑपरेटरों द्वारा निर्दिष्ट किसी भी पुनर्निर्देशन से पहले होता है।

यदि पाइपलाइन पृष्ठभूमि में नहीं है (बाद में चर्चा की गई है), खोल सभी आदेशों को पूरा करने के लिए प्रतीक्षा करता है।

अगर आरक्षित शब्द! पाइपलाइन से पहले नहीं है, बाहर निकलने की स्थिति पाइपलाइन में निर्दिष्ट अंतिम आदेश की निकास स्थिति है। अन्यथा, निकास स्थिति अंतिम आदेश की निकास स्थिति का तार्किक नहीं है। यही है, यदि अंतिम आदेश शून्य लौटाता है, तो निकास स्थिति 1 है; यदि अंतिम आदेश शून्य से अधिक लौटाता है, तो निकास स्थिति शून्य है।

चूंकि मानक इनपुट या मानक आउटपुट की पाइपलाइन असाइनमेंट या दोनों पुनर्निर्देशन से पहले होती हैं, इसे पुनर्निर्देशन द्वारा संशोधित किया जा सकता है। उदाहरण के लिए:

$ कमांड 1 2> और 1 | command2

कमांड 1 के मानक इनपुट और कमांड 1 की मानक त्रुटि दोनों को कमांड 2 के मानक इनपुट में भेजता है।

ए ; या टर्मिनेटर अनुक्रमिक रूप से निष्पादित होने के लिए पिछली एंड-ओआर-सूची (अगली वर्णित) का कारण बनता है; एक और पिछले और-OR-सूची के एसिंक्रोनस निष्पादन का कारण बनता है।

ध्यान दें कि कुछ अन्य गोले के विपरीत, पाइपलाइन में प्रत्येक प्रक्रिया आक्रमणकारी खोल का एक बच्चा है (जब तक कि यह एक शेल बिल्टिन न हो, जिस स्थिति में यह वर्तमान खोल में निष्पादित होता है - लेकिन पर्यावरण पर इसका कोई भी प्रभाव मिटा दिया जाता है)।

पृष्ठभूमि कमांड -

यदि नियंत्रण ऑपरेटर ampersand (&) द्वारा कमांड को समाप्त कर दिया जाता है, तो खोल कमांड को अतुल्यकालिक रूप से निष्पादित करता है - यानी, खोल अगले आदेश को निष्पादित करने से पहले कमांड को समाप्त करने की प्रतीक्षा नहीं करता है।

पृष्ठभूमि में कमांड चलाने के लिए प्रारूप है:

कमांड 1 और [कमांड 2 और ...]

यदि खोल इंटरैक्टिव नहीं है, तो एसिंक्रोनस कमांड का मानक इनपुट / dev / null पर सेट होता है

सूची - आम तौर पर बोलते हुए

एक सूची शून्य या अधिक कमांड का अनुक्रम है जो न्यूलाइन, अर्धविराम, या एम्परसैंड द्वारा अलग किया गया है, और वैकल्पिक रूप से इन तीन वर्णों में से एक द्वारा समाप्त किया गया है। सूची में दिए गए आदेशों को उनके द्वारा लिखे गए क्रम में निष्पादित किया जाता है। यदि आदेश एम्पर्सेंड द्वारा पीछा किया जाता है, तो खोल कमांड शुरू करता है और तुरंत अगले आदेश पर आगे बढ़ता है; अन्यथा यह अगले के लिए आगे बढ़ने से पहले समाप्त करने के लिए आदेश की प्रतीक्षा करता है।

शॉर्ट सर्किट सूची ऑपरेटर

`` && '' और `` || '' एंड-ओआर सूची ऑपरेटर हैं। `'&&' 'पहले कमांड को निष्पादित करता है, और उसके बाद दूसरा आदेश निष्पादित करता है अगर पहले कमांड की निकास स्थिति शून्य है। `` || '' समान है, लेकिन दूसरे कमांड को निष्पादित करता है अगर पहले कमांड की निकास स्थिति nonzero है। `` && '' और '`||' 'दोनों की समान प्राथमिकता है।

फ्लो-कंट्रोल कंस्ट्रक्शन - अगर, मामले के लिए, जबकि

अगर आदेश का वाक्यविन्यास है

अगर सूची है
फिर सूची
[elif सूची
फिर सूची] ...
[अन्य सूची]
फाई

जबकि कमांड का वाक्यविन्यास है

जबकि सूची
सूची करो
किया हुआ

पहली सूची की निकास स्थिति शून्य होने पर दो सूचियों को बार-बार निष्पादित किया जाता है। जब तक कमांड समान नहीं होता है, लेकिन उस समय तक शब्द होता है, जो इसे तब तक दोहराने का कारण बनता है जब तक कि पहली सूची की निकास स्थिति शून्य न हो।

आदेश के लिए वाक्यविन्यास है

शब्द में परिवर्तनीय के लिए ...
सूची करो
किया हुआ

शब्दों का विस्तार किया जाता है, और फिर सूची को बदले में प्रत्येक शब्द को परिवर्तनीय सेट के साथ निष्पादित किया जाता है। क्या करें और किया जा सकता है `` {'' और '`}' '

ब्रेक का सिंटैक्स और जारी रखें कमांड है

ब्रेक [num]
जारी रखें [संख्या]

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

केस कमांड का सिंटैक्स है

मामले में शब्द
पैटर्न) सूची ;;
...
esac

पैटर्न वास्तव में एक या अधिक पैटर्न हो सकता है (बाद में वर्णित शैल पैटर्न देखें), '`' वर्णों से अलग किया गया है।

समूह को एक साथ समूहीकृत करना

कमांड को या तो लिखकर समूहीकृत किया जा सकता है

(सूची)

या

{ सूची;

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

{printf हैलो; printf दुनिया \ n ";}> ग्रीटिंग

कार्य

फ़ंक्शन परिभाषा का वाक्यविन्यास है

नाम () कमांड

एक फ़ंक्शन परिभाषा निष्पादन योग्य कथन है; निष्पादित होने पर यह नाम का नाम स्थापित करता है और शून्य की निकास स्थिति देता है। आदेश आमतौर पर '`{' 'और` `}' के बीच संलग्न एक सूची है।

स्थानीय कमांड का उपयोग कर चर को किसी फ़ंक्शन में स्थानीय घोषित किया जा सकता है। यह किसी फ़ंक्शन के पहले कथन के रूप में दिखाई देना चाहिए, और वाक्यविन्यास है

स्थानीय [चर | -] ...

स्थानीय को बिल्टिन कमांड के रूप में कार्यान्वित किया जाता है।

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

स्थानीय बनाया जा सकता है की तुलना में एकमात्र विशेष पैरामीटर '`-' 'बनाना'` - '' स्थानीय किसी भी शेल विकल्प को फ़ंक्शन के अंदर सेट कमांड के माध्यम से बदल दिया जाता है ताकि फ़ंक्शन लौटने पर उनके मूल मानों पर पुनर्स्थापित किया जा सके।

रिटर्न कमांड का वाक्यविन्यास है

वापसी [निकासस्टैटस

यह वर्तमान में निष्पादन समारोह को समाप्त करता है। वापसी एक अंतर्निहित कमांड के रूप में लागू किया जाता है।

चर और पैरामीटर्स

खोल पैरामीटर का एक सेट बनाए रखता है। किसी नाम से निर्दिष्ट पैरामीटर को चर कहा जाता है। प्रारंभ करते समय, खोल सभी परिवेश चर को खोल चर में बदल देता है। नए चर को फॉर्म का उपयोग करके सेट किया जा सकता है

नाम = मूल्य

उपयोगकर्ता द्वारा निर्धारित चर के पास एक वर्ण होना चाहिए जिसमें केवल वर्णमाला, संख्यात्मक, और अंडरस्कोर शामिल हैं - जिनमें से पहला संख्यात्मक नहीं होना चाहिए। नीचे वर्णित अनुसार एक पैरामीटर को किसी संख्या या विशेष वर्ण द्वारा भी इंगित किया जा सकता है।

स्थितित्मक पैरामीटर्स

एक स्थितित्मक पैरामीटर एक संख्या (एन> 0) द्वारा निर्दिष्ट पैरामीटर है। खोल इन प्रारंभिक रूप से इसके कमांड लाइन तर्कों के मानों को सेट करता है जो शैल स्क्रिप्ट के नाम का पालन करते हैं। सेट (1) बिल्टिन का उपयोग उन्हें सेट या रीसेट करने के लिए भी किया जा सकता है।

विशेष पैरामीटर्स

एक विशेष पैरामीटर एक पैरामीटर है जो निम्नलिखित विशेष वर्णों में से एक द्वारा दर्शाया गया है। पैरामीटर का मान उसके चरित्र के बगल में सूचीबद्ध है।

*

एक से शुरू, स्थितित्मक मानकों में फैलता है। जब विस्तार डबल-उद्धृत स्ट्रिंग के भीतर होता है तो यह आईएफएस वैरिएबल के पहले अक्षर से अलग प्रत्येक पैरामीटर के मान के साथ एक क्षेत्र में फैलता है, या यदि आईएफएस अनसेट हो जाता है।

@

एक से शुरू, स्थितित्मक मानकों में फैलता है। जब विस्तार डबल-कोट्स के भीतर होता है, तो प्रत्येक स्थितित्मक पैरामीटर एक अलग तर्क के रूप में फैलता है। यदि कोई पोजीशनल पैरामीटर नहीं है, तो @ का विस्तार शून्य तर्क उत्पन्न करता है, भले ही @ डबल-कोट किया गया हो। इसका मूल अर्थ क्या है, उदाहरण के लिए, यदि $ 1 `` abc 'है और $ 2 `def ghi' है तो Qq $ @ दो तर्कों तक फैलता है:

एबीसी डीफ जीएच

#

स्थितित्मक मानकों की संख्या में फैलता है।

?

सबसे हालिया पाइपलाइन की निकास स्थिति में विस्तार करता है।

- (हाइफ़न।)

वर्तमान विकल्प झंडे (एकल-अक्षर विकल्प नामों को एक स्ट्रिंग में सम्मिलित किया गया है) जैसा कि आमंत्रण पर निर्दिष्ट है, सेट बिल्टिन कमांड द्वारा, या शेल द्वारा स्पष्ट रूप से विस्तारित किया गया है।

$

आवंटित खोल की प्रक्रिया आईडी में फैलता है। एक सबहेल अपने माता-पिता के रूप में $ के समान मूल्य को बरकरार रखता है।

!

वर्तमान खोल से निष्पादित सबसे हालिया पृष्ठभूमि कमांड की प्रक्रिया आईडी में विस्तारित करता है। पाइपलाइन के लिए, प्रक्रिया आईडी पाइपलाइन में अंतिम आदेश की है।

0 (शून्य।)

खोल या खोल स्क्रिप्ट के नाम पर विस्तारित करता है।

शब्द विस्तार

यह खंड शब्दों पर किए गए विभिन्न विस्तारों का वर्णन करता है। जैसा कि बाद में समझाया गया है, हर शब्द पर सभी विस्तार नहीं किए जाते हैं।

टिल्ड विस्तार, पैरामीटर विस्तार, कमांड प्रतिस्थापन, अंकगणितीय विस्तार, और एक शब्द के भीतर होने वाले उद्धरण निष्कासन एक ही क्षेत्र में विस्तारित होते हैं। यह केवल फ़ील्ड विभाजन या पथनाम विस्तार है जो एक शब्द से कई फ़ील्ड बना सकता है। इस नियम का एक अपवाद ऊपर वर्णित जैसा कि डबल-कोट्स के भीतर @ विशेष पैरामीटर का विस्तार है।

शब्द विस्तार का क्रम है:

  1. टिल्ड विस्तार, पैरामीटर विस्तार, कमांड प्रतिस्थापन, अंकगणितीय विस्तार (ये सभी एक ही समय में होते हैं)।
  2. फ़ील्ड स्प्लिटिंग चरण (1) द्वारा जेनरेट किए गए फ़ील्ड पर तब तक की जाती है जब तक कि आईएफएस चर न हो।
  3. पथनाम विस्तार (जब तक सेट - एफ प्रभावी नहीं है)।
  4. उद्धरण हटाने

$ वर्ण का उपयोग पैरामीटर विस्तार, कमांड प्रतिस्थापन, या अंकगणितीय मूल्यांकन को पेश करने के लिए किया जाता है।

टिल्ड विस्तार (उपयोगकर्ता की होम निर्देशिका को प्रतिस्थापित करना)

एक अज्ञात tilde चरित्र (~) से शुरू एक शब्द tilde विस्तार के अधीन है। स्लैश (/) या शब्द के अंत तक के सभी वर्ण उपयोगकर्ता नाम के रूप में माना जाता है और उपयोगकर्ता की होम निर्देशिका के साथ प्रतिस्थापित किया जाता है। यदि उपयोगकर्ता नाम गुम है (जैसा कि ~ / foobar में है) tilde को HOME चर के मूल्य (वर्तमान उपयोगकर्ता की होम निर्देशिका) के साथ प्रतिस्थापित किया गया है।

पैरामीटर विस्तार

पैरामीटर विस्तार के लिए प्रारूप निम्नानुसार है:

जहां अभिव्यक्ति में सभी वर्ण होते हैं, जब तक कि '`}' ''` `} '' किसी भी बैकस्लैश से या किसी उद्धृत स्ट्रिंग के भीतर से बच निकले, और एम्बेडेड अंकगणितीय विस्तार, कमांड प्रतिस्थापन और परिवर्तनीय विस्तार में वर्णों की जांच नहीं की जाती है, मिलान ``} ''

पैरामीटर विस्तार के लिए सबसे सरल रूप है:

मानदंड का मान, यदि कोई है, प्रतिस्थापित किया गया है।

पैरामीटर नाम या प्रतीक ब्रेसिज़ में संलग्न किया जा सकता है, जो एक से अधिक अंकों के साथ स्थितित्मक पैरामीटर को छोड़कर वैकल्पिक होता है या जब पैरामीटर का पालन उस चरित्र के द्वारा किया जाता है जिसे नाम के हिस्से के रूप में व्याख्या किया जा सकता है। यदि डबल-कोट्स के अंदर पैरामीटर विस्तार होता है:

  1. विस्तार के परिणामों पर पथनाम विस्तार नहीं किया जाता है।
  2. @ के अपवाद के साथ विस्तार के परिणामों पर फील्ड विभाजन नहीं किया जाता है।

इसके अतिरिक्त, पैरामीटर विस्तार को निम्नलिखित प्रारूपों में से एक का उपयोग करके संशोधित किया जा सकता है।

डिफ़ॉल्ट मान का प्रयोग करें। यदि पैरामीटर अनसेट या शून्य है, तो शब्द का विस्तार प्रतिस्थापित किया जाता है; अन्यथा, पैरामीटर का मान प्रतिस्थापित किया जाता है।

डिफ़ॉल्ट मान असाइन करें। यदि पैरामीटर अनसेट या शून्य है, तो शब्द का विस्तार पैरामीटर को असाइन किया गया है। सभी मामलों में, पैरामीटर का अंतिम मान प्रतिस्थापित किया जाता है। केवल चर, स्थितित्मक पैरामीटर या विशेष पैरामीटर नहीं, इस तरह से असाइन किया जा सकता है।

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

वैकल्पिक मूल्य का प्रयोग करें। यदि पैरामीटर अनसेट या शून्य है, तो नल प्रतिस्थापित किया जाता है; अन्यथा, शब्द का विस्तार प्रतिस्थापित किया जाता है।

पहले दिखाए गए पैरामीटर विस्तार में, प्रारूप में कोलन का उपयोग किसी पैरामीटर के लिए परीक्षण में होता है जो अनसेट या शून्य है; कोलन के परिणामों को एक पैरामीटर के लिए एक परीक्षण में परिणाम देता है जो केवल अनसेट होता है।

स्ट्रिंग लंबाई। पैरामीटर के मूल्य के पात्रों में लंबाई।

पैरामीटर विस्तार की निम्नलिखित चार किस्में सबस्ट्रिंग प्रसंस्करण के लिए प्रदान करती हैं। प्रत्येक मामले में, पैटर्न अभिव्यक्ति नोटेशन के बजाय पैटर्न मिलान नोटेशन (शैल पैटर्न देखें), पैटर्न का मूल्यांकन करने के लिए उपयोग किया जाता है। यदि पैरामीटर * या @ है, तो विस्तार का परिणाम अनिर्दिष्ट है। डबल-कोट्स में पूर्ण पैरामीटर विस्तार स्ट्रिंग को संलग्न करने से पैटर्न वर्णों की निम्नलिखित चार किस्मों को उद्धृत नहीं किया जाता है, जबकि ब्रेसिज़ के भीतर वर्णों को उद्धृत करने से यह प्रभाव पड़ता है।

सबसे छोटा प्रत्यय पैटर्न निकालें। एक पैटर्न का उत्पादन करने के लिए शब्द का विस्तार किया गया है। पैरामीटर विस्तार तब पैरामीटर में परिणाम देता है, पैटर्न के मिलान से जुड़े प्रत्यय के सबसे छोटे हिस्से के साथ।

सबसे बड़ा प्रत्यय पैटर्न निकालें। एक पैटर्न का उत्पादन करने के लिए शब्द का विस्तार किया गया है। पैरामीटर विस्तार तब पैरामीटर में परिणाम देता है, पैटर्न हटाए गए प्रत्यय के सबसे बड़े हिस्से के साथ हटा दिया जाता है।

सबसे छोटे उपसर्ग पैटर्न निकालें। एक पैटर्न का उत्पादन करने के लिए शब्द का विस्तार किया गया है। पैरामीटर विस्तार तब पैरामीटर में परिणाम देता है, पैटर्न हटाए गए उपसर्ग के सबसे छोटे हिस्से के साथ।

सबसे बड़ा उपसर्ग पैटर्न हटाएं। एक पैटर्न का उत्पादन करने के लिए शब्द का विस्तार किया गया है। पैरामीटर विस्तार तब पैरामीटर में परिणाम देता है, पैटर्न हटाए गए उपसर्ग के सबसे बड़े हिस्से के साथ।

कमांड प्रतिस्थापन

कमांड प्रतिस्थापन कमांड नाम के स्थान पर एक कमांड के आउटपुट को प्रतिस्थापित करने की अनुमति देता है। कमांड प्रतिस्थापन तब होता है जब कमांड निम्नानुसार संलग्न होता है:

$ (आदेश)

या Po `` backquoted '' संस्करण पीसी:

`command`

शेल कमांड वातावरण में कमांड निष्पादित करके कमांड प्रतिस्थापन का विस्तार करता है और कमांड के मानक आउटपुट के साथ कमांड प्रतिस्थापन को प्रतिस्थापित करता है, प्रतिस्थापन के अंत में एक या अधिक s के अनुक्रमों को हटा देता है। (आउटपुट के अंत से पहले एम्बेडेड s को हटाया नहीं जाता है, हालांकि, फ़ील्ड विभाजन के दौरान, उन्हें s में अनुवाद किया जा सकता है, आईएफएस के मूल्य के आधार पर और उद्धरण जो प्रभाव में है।)

अंकगणितीय विस्तार

अंकगणितीय विस्तार एक अंकगणितीय अभिव्यक्ति का मूल्यांकन करने और इसके मूल्य को प्रतिस्थापित करने के लिए एक तंत्र प्रदान करता है। अंकगणितीय विस्तार के लिए प्रारूप निम्नानुसार है:

$ ((अभिव्यक्ति))

अभिव्यक्ति को इस तरह माना जाता है कि यह डबल-कोट्स में था, सिवाय इसके कि अभिव्यक्ति के अंदर एक डबल-कोट विशेष रूप से इलाज नहीं किया जाता है। खोल पैरामीटर विस्तार, कमांड प्रतिस्थापन, और उद्धरण हटाने के लिए अभिव्यक्ति में सभी टोकन फैलाता है।

अगला, खोल इसे अंकगणितीय अभिव्यक्ति के रूप में मानता है और अभिव्यक्ति के मूल्य को प्रतिस्थापित करता है।

व्हाइट स्पेस स्प्लिटिंग (फील्ड स्प्लिटिंग)

पैरामीटर विस्तार के बाद, कमांड प्रतिस्थापन, और अंकगणितीय विस्तार शैल विस्तार और प्रतिस्थापन के परिणामों को स्कैन करता है जो फ़ील्ड विभाजन और एकाधिक फ़ील्ड के लिए डबल-कोट्स में नहीं होते हैं।

खोल आईएफएस के प्रत्येक चरित्र को एक डिलीमीटर के रूप में मानता है और पैरामीटर विस्तार और कमांड प्रतिस्थापन के परिणामों को विभाजित करने के लिए डिलीमीटर का उपयोग करता है।

पथनाम विस्तार (फ़ाइल नाम जनरेशन)

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

शैल पैटर्न

एक पैटर्न में सामान्य वर्ण होते हैं, जो स्वयं से मेल खाते हैं, और मेटा-वर्ण। मेटा-वर्ण '`!' '` `*' '` `?' 'और' '[' 'इन वर्णों को उद्धृत किए जाने पर उनके विशेष अर्थ खो देते हैं। जब कमांड या वेरिएबल प्रतिस्थापन किया जाता है और डॉलर के संकेत या बैक कोट्स को डबल उद्धृत नहीं किया जाता है, तो वेरिएबल का मान या कमांड का आउटपुट इन वर्णों के लिए स्कैन किया जाता है और वे मेटा-कैरेक्टर में बदल जाते हैं।

एक तारांकन (`` * '') वर्णों की किसी भी स्ट्रिंग से मेल खाता है। एक प्रश्न चिह्न किसी एकल चरित्र से मेल खाता है। एक बायां ब्रैकेट (`` ['') एक चरित्र वर्ग पेश करता है। चरित्र वर्ग का अंत एक (``] '' द्वारा इंगित किया जाता है) यदि ``] '' गायब है तो `` ['' वर्ण वर्ग को शुरू करने के बजाय `` '' '' से मेल खाता है। एक वर्ण वर्ग स्क्वायर ब्रैकेट के बीच किसी भी वर्ण से मेल खाता है। माइनस साइन का उपयोग करके वर्णों की एक श्रृंखला निर्दिष्ट की जा सकती है। वर्ण वर्ग को चरित्र वर्ग के पहले चरित्र को विस्मयादिबोधक बिंदु बनाकर पूरक किया जा सकता है।

एक वर्ण वर्ग में ``] '' शामिल करने के लिए, इसे सूचीबद्ध पहला अक्षर बनाएं (यदि कोई हो तो '`!' 'के बाद)। एक ऋण चिह्न शामिल करने के लिए, इसे सूचीबद्ध पहला या अंतिम वर्ण बनाएं

Builtins

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

:

एक शून्य कमांड जो 0 (सत्य) निकास मान देता है।

फ़ाइल

निर्दिष्ट फ़ाइल में कमांड को खोलकर पढ़ा और निष्पादित किया जाता है।

उपनाम [ नाम [ = स्ट्रिंग ... ]]

यदि नाम = स्ट्रिंग निर्दिष्ट है, तो शेल मान स्ट्रिंग के साथ उपनाम नाम को परिभाषित करता है यदि केवल नाम निर्दिष्ट है, तो उपनाम नाम का मान मुद्रित होता है। बिना किसी तर्क के, उपनाम निर्मित सभी परिभाषित उपनामों के नाम और मूल्य प्रिंट करता है ( unalias देखें )

बीजी [ नौकरी] ...

पृष्ठभूमि में निर्दिष्ट नौकरियां जारी रखें (या यदि कोई नौकरियां नहीं दी जाती हैं)।

कमांड कमांड arg ...

निर्दिष्ट बिल्टिन कमांड निष्पादित करें। (यह तब उपयोगी होता है जब आपके पास एक अंतर्निहित कमांड के साथ एक शेल फ़ंक्शन होता है।)

सीडी [ निर्देशिका ]

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

eval स्ट्रिंग ...

रिक्त स्थान के साथ सभी तर्कों को सम्मिलित करें। फिर आदेश दोबारा पार्स करें और निष्पादित करें।

exec [ कमांड arg ... ]

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

बाहर निकलें [ निकासस्टैटस ]

खोल प्रक्रिया को समाप्त करें। अगर एक्स्टास्टैटस दिया जाता है तो इसे खोल के बाहर निकलने की स्थिति के रूप में उपयोग किया जाता है; अन्यथा पूर्ववर्ती कमांड की निकास स्थिति का उपयोग किया जाता है।

निर्यात का नाम ...

निर्यात-पी

निर्दिष्ट नाम निर्यात किए जाते हैं ताकि वे बाद के आदेशों के वातावरण में दिखाई देंगे। एक चर को अन-निर्यात करने का एकमात्र तरीका इसे अनसेट करना है। खोल एक वैरिएबल के मान को उसी समय सेट करने की अनुमति देता है जब इसे लिखकर निर्यात किया जाता है

निर्यात नाम = मूल्य

कोई तर्क नहीं के साथ निर्यात कमांड सभी निर्यात किए गए चर के नाम सूचीबद्ध करता है। - पी विकल्प निर्दिष्ट के साथ आउटपुट गैर-इंटरैक्टिव उपयोग के लिए उपयुक्त रूप से स्वरूपित किया जाएगा।

एफसी [- संपादक ] [ पहले [ अंतिम ]]

एफसी -एल [- एनआर ] [ पहला [ आखिरी ]]

एफसी-एस [ पुराना = नया ] [ पहला ]

एफसी बिल्टिन सूचियां, या संपादन और पुनः निष्पादन, पहले एक इंटरैक्टिव खोल में दर्ज आदेश।

-एक संपादक

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

-एल (ell)

उन पर एक संपादक का आह्वान करने के बजाय आदेशों की सूची। आदेश पहले और आखिरी ऑपरेंड द्वारा इंगित अनुक्रम में लिखे गए हैं, जैसा कि कमांड नंबर से पहले प्रत्येक कमांड के साथ प्रभावित होता है।

-n

-l के साथ सूचीबद्ध करते समय कमांड नंबर दबाएं।

-r

सूचीबद्ध आदेशों के क्रम को उलट दें (साथ - एल या संपादित (न तो - न ही - एस)

-s

एक संपादक का आह्वान किए बिना कमांड को दोबारा निष्पादित करें।

प्रथम

अंतिम

सूची या संपादित करने के लिए आदेश का चयन करें। पिछले आदेशों की संख्या जिन्हें एक्सेस किया जा सकता है, HISTSIZE चर के मान द्वारा निर्धारित किए जाते हैं । पहले या आखिरी या दोनों का मान निम्न में से एक है:

[+] संख्या

कमांड संख्या का प्रतिनिधित्व करने वाला एक सकारात्मक संख्या; कमांड नंबर - एल विकल्प के साथ प्रदर्शित किया जा सकता है।

-number

एक ऋणात्मक दशमलव संख्या जो आदेश को निष्पादित किया गया था, पहले आदेशों की संख्या निष्पादित की गई थी। उदाहरण के लिए, -1 तुरंत पिछला आदेश है।

तार

एक स्ट्रिंग जो हाल ही में दर्ज की गई कमांड को इंगित करती है जो उस स्ट्रिंग से शुरू होती है। यदि पुराना = नया ऑपरेंड भी निर्दिष्ट नहीं है - पहले ऑपरेंड के स्ट्रिंग फॉर्म में एम्बेडेड बराबर चिह्न नहीं हो सकता है।

निम्नलिखित पर्यावरण चर एफसी के निष्पादन को प्रभावित करते हैं:

FCEDIT

उपयोग करने के लिए संपादक का नाम।

HISTSIZE

पिछले आदेशों की संख्या जो सुलभ हैं।

एफजी [ नौकरी ]

निर्दिष्ट नौकरी या वर्तमान नौकरी अग्रभूमि में ले जाएं।

Getopts optstring var

POSIX Getopts कमांड, बेल लैब्स के साथ उलझन में नहीं होना चाहिए - मेडेड getopt (1)।

पहला तर्क अक्षरों की एक श्रृंखला होनी चाहिए, जिनमें से प्रत्येक वैकल्पिक रूप से एक कोलन द्वारा पीछा किया जा सकता है यह इंगित करने के लिए कि विकल्प को तर्क की आवश्यकता है। निर्दिष्ट चर को पार्स किए गए विकल्प पर सेट किया गया है।

Getopts कमांड व्हाइटस्पेस युक्त तर्कों के संचालन के कारण पुरानी गेटोप्ट (1) उपयोगिता को हटा देता है।

गेटोपेट्स बिल्टिन का उपयोग पैरामीटर की सूची से विकल्प और उनके तर्क प्राप्त करने के लिए किया जा सकता है। जब बोले जाते हैं, तो गेटोपट्स वैल वैरिएबल में निर्दिष्ट चर स्ट्रेल में सूची में विकल्प स्ट्रिंग से अगले विकल्प का मान रखता है और खोल वैरिएबल OPTIND में इंडेक्स होता है जब खोल को बुलाया जाता है, OPTIND को प्रारंभ किया जाता है 1. प्रत्येक विकल्प के लिए एक तर्क, गेटोपेट्स निर्मित इसे शैल वेरिएबल OPTARG में रखेगा यदि ऑप्टस्टिंग में किसी विकल्प की अनुमति नहीं है तो OPTARG अनसेट हो जाएगा।

ऑप्टस्ट्रिंग मान्यता प्राप्त विकल्प अक्षरों की एक स्ट्रिंग है। यदि एक कोलन द्वारा एक पत्र का पालन किया जाता है, तो विकल्प से एक तर्क होने की उम्मीद है जो सफेद स्थान से इसे अलग या अलग नहीं किया जा सकता है। यदि कोई विकल्प कैरेक्टर नहीं मिलता है, तो प्राप्तियां वैरिएबल वैर को '`?' 'पर सेट कर देगी, तो गेटोपेट्स OPTARG को अनसेट कर देगा और मानक त्रुटि में आउटपुट लिखेंगे। ऑप्टिस्ट्रिंग के पहले अक्षर के रूप में एक कोलन निर्दिष्ट करके सभी त्रुटियों को अनदेखा कर दिया जाएगा।

अंतिम विकल्प पहुंचने पर एक nonzero मान वापस कर दिया जाता है। यदि कोई शेष तर्क नहीं है, तो Getopts विशेष विकल्प पर var सेट करेगा, '' - '' अन्यथा, यह var '`?' '

निम्न कोड खंड दिखाता है कि कोई आदेश के लिए तर्कों को कैसे संसाधित कर सकता है जो विकल्प [ए] और [बी] और विकल्प [सी] ले सकता है जिसके लिए एक तर्क की आवश्यकता होती है।

जबकि getopts abc: एफ
कर
मामले में $ एफ
ए | बी) ध्वज = $ एफ ;;
सी) कारग = $ OPTARG ;;
\?) $ USAGE गूंजें; बाहर निकलें 1 ;;
esac
किया हुआ
शिफ्ट 'एक्सपीआर $ OPTIND - 1`

यह कोड निम्न में से किसी एक को समकक्ष के रूप में स्वीकार करेगा:

cmd -acarg फ़ाइल फ़ाइल
cmd -a -c arg फ़ाइल फ़ाइल
cmd -carg -a फ़ाइल फ़ाइल
cmd -a -carg - फ़ाइल फ़ाइल

हैश-आरवी कमांड ...

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

तर्क के साथ, हैश कमांड हैश तालिका से निर्दिष्ट कमांड को हटा देता है (जब तक कि वे कार्य नहीं कर लेते) और फिर उन्हें ढूंढते हैं। - v विकल्प के साथ, हैश कमांड के स्थानों को प्रिंट करता है क्योंकि यह उन्हें पाता है। - r विकल्प हैश कमांड को फ़ंक्शन को छोड़कर हैश तालिका में सभी प्रविष्टियों को हटाने का कारण बनता है।

जॉबिड [ नौकरी ]

नौकरी में प्रक्रियाओं की प्रक्रिया आईडी की प्रिंट करें। यदि नौकरी तर्क छोड़ दिया जाता है, तो वर्तमान नौकरी का उपयोग किया जाता है।

नौकरियों

यह आदेश सभी पृष्ठभूमि प्रक्रियाओं को सूचीबद्ध करता है जो वर्तमान खोल प्रक्रिया के बच्चे हैं।

लोक निर्माण विभाग

वर्तमान निर्देशिका मुद्रित करें। बिल्टिन कमांड एक ही नाम के प्रोग्राम से अलग हो सकता है क्योंकि बिल्टिन कमांड याद करता है कि वर्तमान निर्देशिका प्रत्येक बार फिर से कंप्यूटिंग करने की बजाय क्या है। यह तेज़ी से बनाता है। हालांकि, यदि वर्तमान निर्देशिका का नाम बदल दिया गया है, तो pwd का बिल्टिन संस्करण निर्देशिका के लिए पुराने नाम को प्रिंट करना जारी रखेगा।

पढ़ें [- पी संकेत ] [- आर ] चर ...

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

डिफ़ॉल्ट रूप से, जब तक - आर विकल्प निर्दिष्ट नहीं किया जाता है, बैकस्लैश `` \ 'एक बचने वाले चरित्र के रूप में कार्य करता है, जिसके कारण निम्नलिखित वर्ण का शाब्दिक व्यवहार किया जाता है। यदि बैकस्लैश एक नई लाइन के बाद किया जाता है, तो बैकस्लैश और नई लाइन हटा दी जाएगी।

केवल नाम ...

केवल पढ़ने के लिए

निर्दिष्ट नाम केवल पढ़ने के रूप में चिह्नित हैं, ताकि उन्हें बाद में संशोधित या अनसेट नहीं किया जा सके। खोल एक वैरिएबल के मान को उसी समय सेट करने की अनुमति देता है जब इसे केवल लिखित द्वारा पढ़ा जाता है

केवल नाम = मूल्य

किसी भी तर्क के साथ readonly कमांड केवल पढ़ने के सभी चर के नाम सूचीबद्ध करता है। - पी विकल्प निर्दिष्ट के साथ आउटपुट गैर-इंटरैक्टिव उपयोग के लिए उपयुक्त रूप से स्वरूपित किया जाएगा।

सेट [{- विकल्प | + विकल्प | - तर्क ... ]

सेट कमांड तीन अलग-अलग फ़ंक्शन करता है।

कोई तर्क नहीं के साथ, यह सभी शैल चर के मानों को सूचीबद्ध करता है।

यदि विकल्प दिए जाते हैं, तो यह निर्दिष्ट विकल्प झंडे सेट करता है, या एसएक्स तर्क सूची प्रसंस्करण नामक अनुभाग में वर्णित अनुसार उन्हें साफ़ करता है।

सेट कमांड का तीसरा उपयोग शैल के स्थितित्मक पैरामीटर के मान निर्दिष्ट तर्कों को सेट करना है। किसी भी विकल्प को बदले बिना स्थितित्मक पैरामीटर को बदलने के लिए, सेट करने के पहले तर्क के रूप में `` - '' का प्रयोग करें। यदि कोई तर्क मौजूद नहीं है, तो सेट कमांड सभी पोजीशनल पैरामीटर को साफ़ करेगा (`` shift $ # 'निष्पादित करने के बराबर।

परिवर्तनीय मूल्य

वैरिएबल को वैल्यू असाइन करता है। (सामान्य रूप से setvar setvar का उपयोग करने के बजाय परिवर्तनीय = मान लिखना बेहतर होता है जिसका उद्देश्य उन कार्यों में उपयोग किया जाता है जो वैरिएबल को मान निर्दिष्ट करते हैं जिनके नाम पैरामीटर के रूप में पास किए जाते हैं।)

शिफ्ट [ एन ]

स्थितित्मक पैरामीटर एन बार शिफ्ट करें। एक शिफ्ट $ 2 के मान को $ 2 के मान $ 2 के मान से $ 3 के मान पर सेट करता है और इसी तरह, $ # के मूल्य को कम करके। यदि n स्थितित्मक पैरामीटर की संख्या से अधिक है, तो शिफ्ट एक त्रुटि संदेश जारी करेगा, और वापसी स्थिति 2 से बाहर निकलें।

बार

खोल के लिए एकत्रित उपयोगकर्ता और सिस्टम के समय और खोल से चलने वाली प्रक्रियाओं के लिए प्रिंट करें। वापसी की स्थिति 0 है।

जाल कार्रवाई संकेत ...

निर्दिष्ट संकेतों को प्राप्त होने पर शेल को पार्स करने और क्रिया निष्पादित करने का कारण बनें। संकेत सिग्नल नंबर द्वारा निर्दिष्ट हैं। यदि संकेत 0 है तो खोल समाप्त होने पर कार्रवाई निष्पादित की जाती है। कार्रवाई शून्य या `` - 'हो सकती है, पूर्व में निर्दिष्ट सिग्नल को अनदेखा किया जा सकता है और बाद में डिफ़ॉल्ट कार्रवाई की जा सकती है। जब शेल एक सबहेल बंद कर देता है, तो यह डिफ़ॉल्ट कार्रवाई में फंसे (लेकिन अनदेखा नहीं) संकेतों को रीसेट करता है। जाल कमांड का सिग्नल पर कोई प्रभाव नहीं पड़ता है जिसे खोल में प्रवेश पर नजरअंदाज कर दिया गया था।

टाइप करें [ नाम ... ]

प्रत्येक नाम को कमांड के रूप में व्याख्या करें और कमांड खोज के संकल्प को प्रिंट करें। संभावित संकल्प हैं: खोल कीवर्ड, उपनाम, खोल निर्मित , कमांड, ट्रैक किए गए उपनाम और नहीं मिला। उपनामों के लिए उपनाम विस्तार मुद्रित किया जाता है; आदेशों और ट्रैक किए गए उपनामों के लिए कमांड का पूरा पथनाम मुद्रित होता है।

ulimit [- एच-एस ] [- a -tfdscmlpn [ मूल्य ]]

प्रक्रियाओं पर कठोर या मुलायम सीमाओं के बारे में पूछें या सेट करें या नई सीमाएं निर्धारित करें। हार्ड सीमा के बीच चुनाव (जिसे किसी भी प्रक्रिया का उल्लंघन करने की अनुमति नहीं है, और जिसे इसे कम करने के बाद उठाया नहीं जा सकता है) और मुलायम सीमा (जो प्रक्रियाओं को संकेतित करने का कारण बनती है लेकिन जरूरी नहीं है, और जो उठाया जा सकता है) के साथ बनाया जाता है ये झंडे:

एच

हार्ड सीमा के बारे में सेट या पूछताछ करें

-S

मुलायम सीमाओं के बारे में सेट या पूछताछ करें। यदि न तो - एच न ही - एस निर्दिष्ट है, नरम सीमा प्रदर्शित होती है या दोनों सीमाएं निर्धारित की जाती हैं। यदि दोनों निर्दिष्ट हैं, तो आखिरी जीतता है।

पूछताछ या सेट करने की सीमा, फिर इन झंडे में से किसी एक को निर्दिष्ट करके चुना जाता है:

-ए

सभी मौजूदा सीमाएं दिखाएं

आयकर

CPU समय पर सीमा दिखाएं या सेट करें (सेकंड में)

-f

बनाई जा सकती है कि सबसे बड़ी फ़ाइल पर सीमा दिखाएं या सेट करें (512-बाइट ब्लॉक में)

-d

किसी प्रक्रिया के डेटा सेगमेंट आकार (किलोबाइट्स में) पर सीमा दिखाएं या सेट करें

-s

किसी प्रक्रिया के ढेर आकार (किलोबाइट्स में) पर सीमा दिखाएं या सेट करें

-सी

सबसे बड़ा कोर डंप आकार पर सीमा को दिखाएं या सेट करें जिसे बनाया जा सकता है (512-बाइट ब्लॉक में)

-m

कुल भौतिक मेमोरी पर सीमा को दिखाएं या सेट करें जो किसी प्रक्रिया द्वारा उपयोग में लाया जा सकता है (किलोबाइट्स में)

-l

इस प्रक्रिया को दिखाएं या सेट करें कि प्रक्रिया कितनी मेमोरी लॉक हो सकती है (2) ( किलोबाइट्स में )

-p

इस उपयोगकर्ता के पास एक समय में प्रक्रियाओं की संख्या पर सीमा दिखाएं या सेट करें

-n

संख्या फाइलों पर सीमा को दिखाएं या सेट करें, एक प्रक्रिया एक बार में खुल सकती है

यदि इनमें से कोई भी निर्दिष्ट नहीं है, तो यह फ़ाइल आकार की सीमा है जो दिखाया गया है या सेट है। यदि मान निर्दिष्ट किया गया है, तो सीमा उस संख्या पर सेट की गई है; अन्यथा वर्तमान सीमा प्रदर्शित होती है।

मनमानी प्रक्रिया की सीमाओं को sysctl (8) उपयोगिता का उपयोग करके प्रदर्शित या सेट किया जा सकता है।

उमास्क [ मास्क ]

उमास्क का मान सेट करें (उमास्क (2) देखें निर्दिष्ट ऑक्टल मूल्य पर। यदि तर्क छोड़ा जाता है, तो उमास्क मान मुद्रित होता है।

unalias [- ] [ नाम ]

यदि नाम निर्दिष्ट है, तो खोल उस उपनाम को हटा देता है। यदि - एक निर्दिष्ट है, तो सभी उपनाम हटा दिए जाते हैं।

नाम अनसेट करें ...

निर्दिष्ट चर और फ़ंक्शन अनसेट और अप्रत्याशित हैं। यदि कोई दिया गया नाम एक चर और फ़ंक्शन दोनों से मेल खाता है, तो चर और फ़ंक्शन दोनों अनसेट हैं।

प्रतीक्षा करें [ नौकरी ]

नौकरी में अंतिम प्रक्रिया की निकास स्थिति को पूरा करने और वापस करने के लिए निर्दिष्ट नौकरी की प्रतीक्षा करें। यदि तर्क छोड़ा गया है, तो सभी नौकरियों को पूरा करने की प्रतीक्षा करें और शून्य की निकास स्थिति लौटाएं।

कमांड लाइन संपादन

जब टर्म को टर्मिनल से इंटरैक्टिव रूप से इस्तेमाल किया जा रहा है, तो वर्तमान कमांड और कमांड इतिहास (एसएक्स बिल्टिन्स में एफसी देखें) को वी-मोड कमांड लाइन संपादन का उपयोग करके संपादित किया जा सकता है। यह मोड vi मैन पेज में वर्णित लोगों के उप-समूह के समान, नीचे वर्णित आदेशों का उपयोग करता है। आदेश 'सेट' -o vi vi-mod संपादन को सक्षम करता है और vi डालने मोड में स्थानांतरित करता है। वी-मोड सक्षम के साथ, sh को सम्मिलित मोड और कमांड मोड के बीच स्विच किया जा सकता है। संपादक को यहां पूर्ण रूप से वर्णित नहीं किया गया है, लेकिन बाद के दस्तावेज़ में होगा। यह vi के समान है: टाइपिंग एसीएस आपको कमांड VI कमांड मोड में फेंक देगा। कमांड मोड में रहते हुए एसीसी रिटर्न मारना शेल को लाइन पास कर देगा।

महत्वपूर्ण: यह देखने के लिए मैन कमांड ( % man ) का उपयोग करें कि आपके विशेष कंप्यूटर पर कमांड का उपयोग कैसे किया जाता है।