बैश (यूनिक्स शेल)

बैश यूनिक्स शैल  और कमांड भाषा है जिसे ब्रायन फॉक्स (कंप्यूटर प्रोग्रामर) द्वारा जीएनयू परियोजना के लिए बॉर्न शैल के लिए मुफ्त सॉफ्टवेयर प्रतिस्थापन के रूप में लिखा गया है।  यह 1989 में पहली बार प्रस्तावित हुआ, इसे अधिकांश लिनक्स वितरणों के लिए डिफ़ॉल्ट लॉगिन शैल के रूप में उपयोग किया गया है। बैश उन पहले कार्यक्रमों में से था जिसे लिनक्स टोरवाल्ड्स ने जीसीसी के साथ लिनक्स में परिवर्तन किया था। लिनक्स के लिए विंडोज उप-प्रणाली के माध्यम से विंडोज 10 और विंडोज़ 11 के लिए संस्करण भी उपलब्ध है।  यह सोलारिस (ऑपरेटिंग सिस्टम) 11 में डिफ़ॉल्ट उपयोगकर्ता शैल भी है। बैश एप्पल MacOS के संस्करणों में 10.3 (मूल रूप से, डिफ़ॉल्ट शैल tcsh था) macOS कैटालिना के 2019 प्रस्तावित के लिए, डिफ़ॉल्ट शैल को zsh में  परिवर्तन कर दिया, चूँकि बैश वैकल्पिक शैल के रूप में उपलब्ध है।

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

शैल का नाम बॉर्न अगेन शैल के लिए परिवर्णी शब्द है, बॉर्न शैल के नाम पर वाक्य को यह प्रतिस्थापित करता हैi तत्पश्चात जन्म लेने की धारणा उत्पन्न करता है।

संस्करण 1.03 (अगस्त 1989) से बैश में सुरक्षा बग, अनुबंध शेलशॉक (सॉफ्टवेयर बग), सितंबर 2014 की प्रारम्भ में शोध किया गया था और जल्दी से इंटरनेट पर परिवर्तन की श्रृंखला का नेतृत्व किया।  बग की पहचान होने के तुरंत बाद बग को ठीक करने के लिए पैच उपलब्ध करा दिए गए थे।

इतिहास
ब्रायन फॉक्स ने 10 जनवरी 1988 को कंप्यूटर प्रोग्रामिंग में बैश को कोड करना शुरू किया, जब रिचर्ड स्टालमैन पूर्व डेवलपर द्वारा की जा रही प्रगति की कमी से असंतुष्ट हो गए। स्टॉलमैन और फ्री सॉफ्टवेयर फाउंडेशन ने फ्री शैल पर विचार किया जो सम्मलित शैल स्क्रिप्ट को BSD और GNU कोड से निर्मित पूर्णतया मुक्त प्रणाली के लिए रणनीतिक रूप से चला सकता है यह उन कुछ परियोजनाओं में से था जिसमें फॉक्स ने काम किया था और उन्होंने स्वयं वित्त पोषित किया था। फॉक्स के साथ एफएसएफ के कर्मचारी के रूप में काम करना। फ़ॉक्स ने 8 जून 1989 को बैश संस्करण .99 को बीटा के रूप में प्रस्तावित किया, और 1992 से 1994 के मध्य, जब उन्हें एफएसएफ से हटा दिया गया, तब तक वे प्राथमिक अनुरक्षक बने रहे। तब उनका उत्तरदायित्व दूसरे शुरुआती योगदानकर्ता चेत रमी को दी गई।

उस समय से, बैश लिनक्स के उपयोगकर्ताओं के बीच अब तक का सबसे लोकप्रिय शैल बन गया है, जो ऑपरेटिंग प्रणाली के विभिन्न वितरणों पर डिफ़ॉल्ट इंटरैक्टिव शैल बन गया है। (चूँकि अल्मक्विस्ट शैल डिफ़ॉल्ट स्क्रिप्टिंग शैल हो सकता है) और एप्पल के मैकओएस पर अक्टूबर 2019 में मैकओएस कैटालिना से पहले प्रस्तावित हुआ।  बैश को माइक्रोसॉफ़्ट विंडोज़ में भी पोर्ट किया गया है और साइगविन और  MinGW के साथ वितरित किया गया है, DJJPP परियोजना द्वारा डीओएस को, नोवेल नेटवेयर को, GNV परियोजना द्वारा  Open VMS को,  ArcaOS को, और एंड्रॉइड को विभिन्न टर्मिनल अनुकरण अनुप्रयोगों के माध्यम से वितरित किया गया है।

सितंबर 2014 में, यूनिक्स/लिनक्स विशेषज्ञ स्टीफ़न चेज़लस ने, कार्यक्रम में सुरक्षा बग का शोध किया। बग, जिसे पहली बार 24 सितंबर को प्रकट किया गया था, जिसका नाम शैलशॉक दिया गया था और इसे CVE-2014-6271, CVE-2014-6277 और CVE-2014-7169 संख्याओं को निर्दिष्ट किया गया था I बग को गंभीर माना गया था, क्योंकि बैश का उपयोग करने वाली कॉमन गेटवे इंटरफ़ेस स्क्रिप्ट्स असुरक्षित हो सकती हैं, जिससे मनमाने कोड निष्पादन को सक्षम किया जा सकता है। बग इस बात से संबंधित था कि कैसे बैश पर्यावरण चर के माध्यम से उप-शैल फ़ंक्शन में परिभाषाओं को को पास करता है।

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

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

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

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

बैश दस्तावेजों का समर्थन करता है। चूंकि संस्करण 2.05b बैश  ऑपरेटर का उपयोग करके यहां स्ट्रिंग से मानक इनपुट को पुनर्निर्देशित कर सकता है ।

बैश 3.0 पर्ल की याद दिलाने वाले वाक्य-विन्यास का उपयोग करके इस प्रक्रिया में नियमित अभिव्यक्ति संघ का समर्थन करता है।

फरवरी 2009 में, बैश 4.0 ने साहचर्य सरणियों के लिए समर्थन दर्शाया। एडब्लूके या टीसीएल के समान प्रकार से साहचर्य सरणी सूचकांक तार हैं। इनका उपयोग बहुआयामी सरणियों का अनुकरण करने के लिए किया जा सकता है। बैश 4 भी अपने लाइसेंस को जीपीएल -3.0-या-बाद में बदल देता है; कुछ उपयोगकर्ताओं को इस लाइसेंस परिवर्तन पर संदेह है कि क्यों MacOS पुराने संस्करणों का उपयोग करना जारी रखता है। एप्पल ने अंततः 2019 में MacOS  कैटालिना प्रस्तावित के साथ डिफ़ॉल्ट शैल के रूप में अपने ऑपरेटिंग प्रणाली में बैश का उपयोग करना बंद कर दिया।

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

$ echo a{p,c,d,b}e

ape ace ade abe

$ echo {a,b,c}{d,e,f}

ad ae af bd be bf cd ce cf

उपयोगकर्ताओं को पोर्टेबल शैल स्क्रिप्ट में ब्रेस विस्तार का उपयोग नहीं करना चाहिए, क्योंकि बॉर्न शैल समान आउटपुट नहीं देता है।

$ # A traditional shell does not produce the same output

$ /bin/sh -c 'echo a{p,c,d,b}e'

a{p,c,d,b}e

जब ब्रेस विस्तार को वाइल्डकार्ड के साथ जोड़ दिया जाता है, तो पहले ब्रेसिज़ का विस्तार किया जाता है, और फिर परिणामी वाइल्डकार्ड को सामान्य रूप से प्रतिस्थापित किया जाता है। इसलिए, वर्तमान निर्देशिका में JPEG और PNG छवियों की सूची निम्नलिखित का उपयोग करके प्राप्त की जा सकती है:

ls *.{jpg,jpeg,png}   # expands to *.jpg *.jpeg *.png - after which, # the wildcards are processed echo *.{png,jp{e,}g}  # echo just show the expansions - # and braces in braces are possible.

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

$ echo {1..10}

1 2 3 4 5 6 7 8 9 10

$ echo {01..10}

01 02 03 04 05 06 07 08 09 10

$ echo file {1..4}.txt

file1.txt file2.txt file3.txt file4.txt

$ echo {a..e}

a b c d e

$ echo {1..10..3}

1 4 7 10

$ echo {a..j..3}

a d g ja d g j

जब ब्रेस विस्तार को चर विस्तार (A.K.A. पैरामीटर विस्तार और पैरामीटर प्रतिस्थापन) के साथ जोड़ा जाता है, तो चर विस्तार ब्रेस विस्तार के बाद किया जाता है, जो कुछ विषयो में  eval बनाने में निर्मित उपयोग की आवश्यकता हो सकती है जो, इस प्रकार:

$ start = 1; end = 10

$ echo {$start..$end} # fails to expand due to the evaluation order

{1..10}

$ eval echo {$start..$end} # variable expansion occurs then resulting string is evaluated

1 2 3 4 5 6 7 8 9 10

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

परंपरा-संगत बैश स्टार्टअप उदाहरण
नीचे दिया गया स्केलेटन बॉर्न शैल के साथ संगत है और  ,  के लिए csh के समान शब्दार्थ देता है  तथा   e> एक शॉर्ट सर्किट मूल्यांकन है जो परीक्षण करता है कि क्या फ़ाइल नाम सम्मलित है और पढ़ने योग्य है,  यदि यह नही तो इसके बाद के भाग को छोड़ दें  ।

[ -r ~/.profile ] &&. ~/.profile            # set up environment, once, Bourne-sh syntax only

if [ -n "$PS1" ] ; then                      # are we interactive? [ -r ~/.bashrc    ] &&. ~/.bashrc       # tty/prompt/function setup for interactive shells

[ -r ~/.bash_login ] &&. ~/.bash_login   # any at-login tasks for login shell only fi                                           # End of "if" block

बैश स्टार्टअप में ऑपरेटिंग सिस्टम की समस्याएँ
यूनिक्स और लिनक्स के कुछ संस्करणों में बैश प्रणाली स्टार्टअप स्क्रिप्ट होती है सामान्यतः  निर्देशिका के अंतर्गत। बैश इन्हें अपने मानक आरंभीकरण के भाग के रूप में रखता है, लेकिन अन्य स्टार्टअप फ़ाइलें उन्हें प्रलेखित बैश स्टार्टअप अनुक्रम की तुलना में भिन्न पढ़ा जा सकता है। रूट उपयोक्ता की फ़ाइलों में डिफ़ॉल्ट सामग्री में भी समस्याएँ हो सकती हैं, साथ ही स्केलेटन फ़ाइलें जो सिस्टम सेटअप पर नए उपयोगकर्ता खातों को प्रदान करता है। X विंडो प्रणाली को प्रक्षेपण करने वाली स्टार्टअप स्क्रिप्ट्स विंडो प्रबंधक को प्रक्षेपण करने से पहले उपयोगकर्ता-पर्यावरण चर स्थापित करने के प्रयास में उपयोगकर्ता बैश स्टार्टअप स्क्रिप्ट के साथ आश्चर्यजनक चीजें भी कर सकते हैं। इन विषयों को प्रायः    या   फ़ाइल का उपयोग करके    पढ़ने के लिए संबोधित किया जा सकता है - जो पर्यावरण चर प्रदान करता है जो बैश शैल विंडो को विंडो मैनेजर की अपेक्षा से उत्पन्न करता है, जैसे कि xterm या Gnome Terminal I

पोर्टेबिलिटी
विकल्प के साथ आमंत्रित करना या किसी स्क्रिप्ट में  बताते हुए बैश को Posix POSIX.2|POSIX 1003.2 मानक के अति निकट के अनुरूप है। पोर्टेबिलिटी के लिए बनाई गई बैश शैल स्क्रिप्ट को कम से कम POSIX शैल मानक को ध्यान में रखना चाहिए। POSIX में नहीं मिली कुछ बैश विशेषताएँ हैं:


 * कुछ विस्तारित इनवोकेशन विकल्प
 * ब्रेस विस्तार
 * सरणियाँ और साहचर्य सरणियाँ
 * डबल कोष्ठक... विस्तारित परीक्षण निर्माण और इसका रेगेक्स संघ
 * डबल कोष्ठक अंकगणित-मूल्यांकन निर्माण (केवल (( ... )); $(( ... )) पॉज़िक्स है)
 * पैरामीटर विस्तार में कुछ स्ट्रिंग-परिवर्तन ऑपरेशन
 * स्थानीय सीमा वाले चर के लिए
 * प्रक्रिया प्रतिस्थापन
 * बैश-विशिष्ट बिल्टिन
 * कोप्रोसेस
 * $EPOCHSECONDS and $EPOCHREALTIME चर

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

कुंजीपटल अल्प मार्ग
बैश डिफ़ॉल्ट (Emacs) कुंजी बाइंडिंग का उपयोग करके कमांड लाइन संपादन के लिए कुंजीपटल शॉर्टकट प्रदान करने के लिए रीडलाइन का उपयोग करता है। vi बाइंडिंग को   को चलाकर सक्षम किया जा सकता है.

प्रक्रिया प्रबंधन
बैश शैल में कमांड के निष्पादन के दो उपाय हैं: बैच, और समवर्ती मोड।

बैच में कमांड निष्पादित करने के लिए (अर्थात, अनुक्रम में) उन्हें वर्ण ";", या भिन्न-भिन्न पंक्तियों से भिन्न किया जाना चाहिए;

command1; command2

इस उदाहरण में, जब command1 समाप्त हो जाता है, तो command2 निष्पादित हो जाता है।

निष्पादन कमांड के अंत में (प्रतीक) का उपयोग करके command1 की पृष्ठभूमि का  निष्पादन हो सकता है, और प्रक्रिया को पृष्ठभूमि में निष्पादित किया जाएगा जो शैल पर तुरंत नियंत्रण लौटाता है और कमांड के निरंतर निष्पादन की अनुमति देता है।

या दो command1 और command2 का समवर्ती निष्पादन करने के लिए, उन्हें निम्नलिखित उपाय से बैश शैल  में निष्पादित किया जाना चाहिए:

command1 & command2

इस विषय में command1 को पृष्ठभूमि और प्रतीक में निष्पादित किया जाता है, तथा उस शैल पर नियंत्रण लौटाता है जो अग्रभूमि में command2 को निष्पादित करता है।

इस प्रक्रिया को रोका जा सकता है और जब प्रक्रिया अग्रभूमि में चल रही हो तो Ctrl लिख करके बैश पर नियंत्रण लौटाया जा सकता है।

सभी प्रक्रियाओं की सूची, दोनों पृष्ठभूमि में रुकी हुई, को चलाकर प्राप्त की जा सकती है :

$ jobs

[1] - Running command1

[2] + Stopped command2

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

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

kill %1

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

cd "$SOMEWHERE" && ./do_something || echo "An error occurred" >&2

जहां ./do_something केवल तभी निष्पादित होता है जब cd (निर्देशिका बदलें) कमांड सफल होता है (शून्य की निकास स्थिति लौटाता है) और echo कमांड केवल तभी निष्पादित किया जाएगा जब cd या ./do_something कमांड त्रुटि लौटाता है (गैर-शून्य) बाहर निकलने की स्थिति)।

सभी आदेशों के लिए निकास स्थिति को विशेष चर  में संग्रहीत किया जाता हैI बैश भी समर्थन करता है if ...;then ...;else ...;fi तथा case $VARIABLE in $pattern)...;;$other_pattern)...;; esac सशर्त कमांड मूल्यांकन के रूप।

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

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

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

यह भी देखें

 * कमांड शेल की शैल

बाहरी संबंध

 * (interview with GNU Bash's maintainer, Chet Ramey)
 * (interview with GNU Bash's maintainer, Chet Ramey)