बैश फाइल एक्सटेंशन क्या है?


84

मैंने एक टेक्स्ट एडिटर में एक बैश स्क्रिप्ट लिखी है, मैं अपनी स्क्रिप्ट को किस एक्सटेंशन में सहेजता हूं ताकि वह बैश स्क्रिप्ट के रूप में चल सके? मैंने एक स्क्रिप्ट बनाई है जिसे सिद्धांत रूप में एक ssh सर्वर शुरू करना चाहिए। मैं सोच रहा था कि एक बार इस पर क्लिक करने के बाद स्क्रिप्ट को कैसे निष्पादित किया जाए। मैं OS X 10.9.5 चला रहा हूं।


4
शेल स्क्रिप्ट को किसी विशेष विस्तार की आवश्यकता नहीं होती है। बस इसे निष्पादित करेंbash myscript
शुभ

7
इसका आमतौर पर .sh, लेकिन विस्तार की आवश्यकता नहीं है। लिनक्स विंडोज नहीं है। आपकी स्क्रिप्ट की व्याख्या करने वाला कार्यक्रम इसकी पहली पंक्ति में निर्धारित होता है, जो होना चाहिए #!/bin/bash। इसमें पैरामीटर भी शामिल हो सकते हैं।
हेवनार्ड

1
@anubhava मुझे अपनी स्क्रिप्ट को कैसे निष्पादित करना होगा अगर मैं सिर्फ उस पर डबल क्लिक करने के लिए और वास्तव में "बैश मायस्क्रिप्ट" टाइप नहीं कर पाऊंगा
Amedeo

2
@Amedeo जो लाइन के साथ आपकी फ़ाइल को शीर्षक देगा #!/bin/bash
हेवनार्ड

जवाबों:


110

अन्य उत्तरों से असहमत, .shशेल स्क्रिप्ट के लिए एक्सटेंशन का उपयोग करने के लिए एक सामान्य सम्मेलन है - लेकिन यह एक उपयोगी सम्मेलन नहीं है। एक्सटेंशन का उपयोग न करना बेहतर है। यह बताने में सक्षम होने के foo.shकारण कि इसका नाम न्यूनतम होने के कारण एक शेल स्क्रिप्ट है, और आप लचीलेपन के नुकसान के साथ इसके लिए भुगतान करते हैं।

एक बैश स्क्रिप्ट को निष्पादन योग्य बनाने के लिए, उसके शीर्ष पर एक शबंग रेखा होनी चाहिए :

#!/bin/bash

और chmod +xकमांड का उपयोग करें ताकि सिस्टम इसे एक निष्पादन योग्य फ़ाइल के रूप में पहचान सके। फिर इसे आपके द्वारा सूचीबद्ध निर्देशिकाओं में से एक में स्थापित करने की आवश्यकता है $PATH। यदि स्क्रिप्ट को कॉल किया जाता है foo, तो आप टाइप करके इसे शेल प्रॉम्प्ट से निष्पादित कर सकते हैं foo। या यदि यह वर्तमान निर्देशिका (अस्थायी स्क्रिप्ट के लिए सामान्य) में है, तो आप टाइप कर सकते हैं ./foo

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

UNIX- जैसी प्रणालियाँ विशुद्ध रूप से पाठ्य कमांड लाइन इंटरफेस के साथ शुरू हुईं। KDE और Gnome जैसे GUI को बाद में जोड़ा गया था। जीयूआई डेस्कटॉप सिस्टम में, आप आमतौर पर एक प्रोग्राम चला सकते हैं (फिर से, चाहे वह स्क्रिप्ट हो या बाइनरी एक्ज़ीक्यूटेबल) उदाहरण के लिए, एक आइकन पर डबल-क्लिक करना जो इसे संदर्भित करता है। आमतौर पर यह किसी भी आउटपुट को प्रोग्राम को प्रिंट करता है और आपको कमांड-लाइन तर्क पास करने नहीं देता है; शेल प्रॉम्प्ट से इसे चलाने की तुलना में यह बहुत कम लचीला है। लेकिन कुछ कार्यक्रमों (ज्यादातर GUI क्लाइंट) के लिए यह अधिक सुविधाजनक हो सकता है।

शेल स्क्रिप्टिंग को कमांड लाइन से सीखा जाता है, न कि GUI से।

(कुछ उपकरण कर फ़ाइल एक्सटेंशन के लिए भुगतान ध्यान उदाहरण के लिए, आम तौर पर compilers भाषा कोड में लिखा है निर्धारित करने के लिए एक्सटेंशन का उपयोग:। .cसी के लिए, .cppसी। के लिए ++, आदि यह सम्मेलन निष्पादन योग्य फ़ाइलों पर लागू नहीं होता)

ध्यान रखें कि UNIX (और UNIX जैसी प्रणाली) विंडोज नहीं है। MS Windows आमतौर पर फ़ाइल के एक्सटेंशन का उपयोग यह निर्धारित करने के लिए करता है कि इसे कैसे खोलें / निष्पादित करें। बाइनरी निष्पादनयोग्य को एक .exeविस्तार की आवश्यकता होती है । यदि आपके पास विंडोज के तहत UNIX जैसा शेल स्थापित है, तो आप .shशेल स्क्रिप्ट के रूप में एक्सटेंशन को पहचानने के लिए विंडोज को कॉन्फ़िगर कर सकते हैं , और इसे खोलने के लिए शेल का उपयोग कर सकते हैं; विंडोज में #!कन्वेंशन नहीं है ।


2
मैं आपके लिए जो लक्ष्य कर रहा हूं, उसका चौथे पैराग्राफ में उल्लेख किया गया है। मेरी स्क्रिप्ट चल रही है जब एक आइकन पर क्लिक करें जो इसे संदर्भित करता है।
आमदियो

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

4
(नेक्रो) यदि आप एक्सटेंशन को छोड़ देते हैं, तो आपके पास एक समान नाम वाला फ़ोल्डर नहीं हो सकता है। इसलिए, उदाहरण के लिए, आपके पास deploy.sh(या deploy.bash) और deployअतिरिक्त तैनाती तर्क के साथ एक फ़ोल्डर है। यदि आप स्क्रिप्ट का नाम बदल देते हैं तो deployयह नाम संघर्ष का कारण बन जाएगा। फ़ाइल या फोल्डर का नामकरण अलग से प्रबंधनीयता को नुकसान पहुंचाता है और संभवतः फ़ाइल को छांटना ( lsसंपादकों आदि में)। बेशक, शेबंग है - अंत में - निर्धारक। लेकिन फ़ाइल एक्सटेंशन में उनका सही स्थान है।
काफोसो

2
@ काफ़ोसो: मुझे नहीं लगता कि मुझे कभी भी एक स्क्रिप्ट और एक ही नाम के साथ एक निर्देशिका की आवश्यकता महसूस हुई है। यदि मैंने किया है, तो मैं निर्देशिका को कॉल कर सकता हूं Deploy, हालांकि मामला-असंवेदनशील फ़ाइल सिस्टम की प्रतिलिपि बनाते समय समस्या हो सकती है।
कीथ थॉम्पसन

2
एक मैक पर, डबल क्लिक करने वाली फाइलें हमेशा उन्हें डिफ़ॉल्ट ऐप में खोलती हैं। इस प्रकार यह एक .shविस्तार करने के लिए उपयोगी है ताकि स्क्रिप्ट आपके वांछित संपादक में खुल जाए। यदि आप डबल क्लिक किए जाने पर स्क्रिप्ट चलाना चाहते हैं, तो इसे .commandएक्सटेंशन दें और डबल क्लिक होने पर यह टर्मिनल में चलेगा।
बॉलपॉइंटबैन

18

आपको किसी भी विस्तार की आवश्यकता नहीं है (या आप एक मनमाना चुन सकते हैं, लेकिन .shएक उपयोगी सम्मेलन है)।

आपको अपनी स्क्रिप्ट के साथ शुरू करना चाहिए #!/bin/bash(उस पहली पंक्ति को निष्पादित (2) syscall द्वारा समझा जाता है ), और आपको अपनी फ़ाइल को निष्पादित करना चाहिए chmod u+x। इसलिए यदि आपकी स्क्रिप्ट कुछ फ़ाइल में है $HOME/somedir/somescriptname.shतो आपको एक बार टाइप करना होगा

 chmod u+x  $HOME/somedir/somescriptname.sh

एक टर्मिनल में। देखें chmod (1) आदेश और के लिए chmod (2) syscall के लिए।

जब तक आप पूरे फ़ाइल पथ को टाइप नहीं कर रहे हैं, आपको उस फ़ाइल को आपके द्वारा बताई गई कुछ निर्देशिका में रखना चाहिए PATH(देखें environ (7) और execvp (3) ), जिसे आप ~/.bashrcअपने लॉगिन शेल में स्थायी रूप से सेट कर सकते हैं bash)

BTW, आप अपनी स्क्रिप्ट को किसी अन्य भाषा में लिख सकते हैं, जैसे कि Python में इसे शुरू करने से #!/usr/bin/python, या Ocaml में इसे लिखकर #!/usr/bin/ocaml...

अपनी स्क्रिप्ट को डबल-क्लिक करके निष्पादित करना (क्या? आपने नहीं कहा था!) ​​एक डेस्कटॉप वातावरण समस्या है और यह डेस्कटॉप विशिष्ट हो सकता है (केडी, मेट, गनोम, या आइसडब्ल्यूएम या रेटपॉयसन के साथ भिन्न हो सकता है)। शायद EWMH कल्पना पढ़ने से आपको एक बेहतर तस्वीर प्राप्त करने में मदद मिल सकती है।

शायद आपकी स्क्रिप्ट को निष्पादन योग्य बनाने के साथ chmodयह आपके डेस्कटॉप (जाहिरा तौर पर, MacOSX पर क्वार्ट्ज ) पर क्लिक करने योग्य बना सकता है । लेकिन फिर आपको संभवतः इसे कुछ दृश्य प्रतिक्रिया देनी चाहिए।

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

मुझे विश्वास नहीं है कि क्लिक करके अपनी शेल स्क्रिप्ट को चलाना एक अच्छा विचार है। आप शायद अपनी शेल स्क्रिप्ट में तर्क देने में सक्षम होना चाहते हैं (और क्लिक करके आप ऐसा कैसे करेंगे?), और आपको अपने आउटपुट की परवाह करनी चाहिए। यदि आप एक शेल स्क्रिप्ट लिखने में सक्षम हैं, तो आप एक टर्मिनल में एक इंटरैक्टिव शेल का उपयोग करने में सक्षम हैं। यह एक स्क्रिप्ट का उपयोग करने का सबसे अच्छा और सबसे प्राकृतिक तरीका है। अच्छा इंटरैक्टिव गोले (जैसे zsh या मछली या शायद एक हाल ही में bash) स्वादिष्ट और विन्यास है स्वतः पूर्ण सुविधाओं और आप (उपयोग करना सीखना एक बहुत लिखने की आवश्यकता नहीं होगी tabअपने कीबोर्ड के कुंजी)। इसके अलावा, स्क्रिप्ट और प्रोग्राम अक्सर कंपोजिट कमांड (पाइपलाइन, आदि ...) के हिस्से होते हैं।

पुनश्च। मैं 1986 से यूनिक्स और 1993 से लिनक्स का उपयोग कर रहा हूं। मैंने कभी भी अपने प्रोग्राम या स्क्रिप्ट को क्लिक करके शुरू नहीं किया। मैं क्यों?


3
ठीक है, इसलिए मैंने एक टेक्स्ट एडिटर में अपनी स्क्रिप्ट बनाई है। मैं फ़ाइल को अपने डेस्कटॉप पर सहेजता हूं। जब मैं अपने स्क्रिप्ट पर सहेजे गए अपने स्क्रिप्ट पर क्लिक करता हूं, तो मैं चाहता हूं कि यह वास्तव में उस पर क्लिक करने पर चले।
Amedeo

6
मुझे नहीं पता कि आपका डेस्कटॉप (KDE, Gnome, MATE, ...) क्या है। मैं आपको एक टर्मिनल में कमांड लाइन का उपयोग करने के लिए दृढ़ता से आमंत्रित करता हूं, विशेष रूप से आपकी स्क्रिप्ट चलाने के लिए (आप शायद उन्हें कुछ तर्क देना चाहते हैं; आप डेस्कटॉप पर ऐसा कैसे करेंगे?)। यदि आप एक शेल स्क्रिप्ट को कोड करने में सक्षम हैं, तो आपको शेल को अंतःक्रियात्मक रूप से एक टर्मिनल में उपयोग करने में सक्षम होना चाहिए
बेसिल स्टायरनेविच

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

2
मैं समझता हूँ कि, एक परियोजना के लिए मैं काम कर रहा हूँ। मैं चाहता हूं कि स्क्रिप्ट पर एक बार क्लिक किया जाए। इम स्क्रिप्ट चलाने के लिए टर्मिनल का उपयोग करने से बचने की कोशिश कर रहा है।
अमेडियो

3
जब तक मालिक के लिए निष्पादन को प्रतिबंधित करने का कोई विशेष कारण chmod +xनहीं होता chmod u+x, मैं इसके बजाय उपयोग करता हूं ।
कीथ थॉम्पसन

2

बस .sh

स्क्रिप्ट को इस तरह से चलाएं:

./script.sh

संपादित करें: जैसे अनुभा ने कहा, विस्तार वास्तव में मायने नहीं रखता। लेकिन संगठनात्मक कारणों से, अभी भी एक्सटेंशन का उपयोग करने की सिफारिश की जाती है।


6
यदि आप एक स्क्रिप्ट चला रहे हैं, तो आपके पास आमतौर पर परवाह करने का कोई कारण नहीं है कि इसमें क्या लिखा गया है। एक बैश स्क्रिप्ट और एक द्विआधारी निष्पादन योग्य को उसी तरह निष्पादित किया जाता है। .shएक निष्पादन योग्य स्क्रिप्ट में एक प्रत्यय जोड़ना आम तौर पर बेकार अव्यवस्था है।
कीथ थॉम्पसन

1
हाँ, लेकिन जैसा कि मैंने अपने संपादन में कहा - यह स्क्रिप्ट को व्यवस्थित करने के लिए एक सम्मेलन है - अधिक नहीं ?!
मार्क एंटन डाहमेन 16

5
मुझे बहुत सी स्क्रिप्ट्स एक .shएक्सटेंशन (और एक .bashएक्सटेंशन के साथ कम ) के साथ दिखाई देती हैं, लेकिन मुझे यकीन नहीं है कि यह बिल्कुल उपयोगी है। यदि मैं एक स्क्रिप्ट का नाम देता हूं foo.shऔर मैं बाद में इसे पर्ल में फिर से लागू करने का फैसला करता हूं, तो मैं या तो नाम बदल सकता हूं (और इसका उपयोग करने वाली हर चीज को संपादित कर सकता हूं) या इसे एक भ्रामक विस्तार के साथ छोड़ सकता हूं। अगर मैं इसे नाम देता fooहूं, तो मुझे वह समस्या नहीं है।
कीथ थॉम्पसन

@KeithThompson मैं एक उपयोग की अपने आप सोच सकते हैं, मैं करते परवाह क्या लिपि में लिखी जाती है। मैं पर्ल के लिए नहीं बोल सकता है, लेकिन मैं बहुत ज्यादा परवाह है अगर एक स्क्रिप्ट अजगर या बैश में लिखा है। मैं आम तौर पर मान सकता हूं कि बैश स्क्रिप्ट कोई काम नहीं करेगी, लेकिन पायथन स्क्रिप्ट में निर्भरता है, और पायथन 2 और पायथन 3 एक दूसरे के साथ संगत नहीं हैं। मुझे यह भी लगता है कि संकलित बायनेरिज़ और स्क्रिप्ट्स के बीच अंतर करना महत्वपूर्ण है (जिसमें दोनों का कोई विस्तार नहीं होगा), क्योंकि उनके पास अलग-अलग निर्भरता की आवश्यकता है (उदाहरण के लिए, एक बाइनरी को पुस्तकालयों की आवश्यकता हो सकती है और एएमडी 64 के लिए संकलित किया जा सकता है और केवल उसी पर काम किया जा सकता है)।
जूनियर

@ जर्र ज़रूर, कभी-कभी यह मायने रखता है (और आप चलाकर head -1 script.fooया बता सकते हैं file script.foo)। लेकिन अगर सब कुछ सही तरीके से स्थापित और कॉन्फ़िगर किया गया है, तो 99% समय मैं बस यही चाहता हूं कि कमांड वही करे जो वह करने वाला है। मेरे लिए, कि हर बार मैं इसे चलाने के लिए .pyया एक .bashप्रत्यय के बारे में पता होना उचित नहीं है।
कीथ थॉम्पसन

2

मुझे पता है कि यह अभी काफी पुराना है, लेकिन मुझे ऐसा लगता है कि इस सवाल से क्या जोड़ा जा रहा है।

यदि आपका मैक पर है और आप डबल क्लिक करके स्क्रिप्ट चलाना चाहते हैं तो आपको .commandएक्सटेंशन का उपयोग करने की आवश्यकता है । फ़ाइल निष्पादन योग्य बनाने से पहले भी ऐसा ही करें chmod -x

जैसा कि पहले उल्लेख किया गया था, यह वास्तव में उपयोगी tbh नहीं है।


1

TL, DR - यदि स्क्रिप्ट का उपयोगकर्ता (जरूरी नहीं कि डेवलपर) GUI इंटरफ़ेस का उपयोग कर रहा है, तो यह इस बात पर निर्भर करता है कि वे किस फ़ाइल ब्राउज़र का उपयोग कर रहे हैं। MacOS के खोजक को .shस्क्रिप्ट निष्पादित करने के लिए विस्तार की आवश्यकता होगी । Gnome Nautilus, हालांकि, .shविस्तार के साथ या इसके बिना ठीक से सम्‍मिलित लिपियों को पहचानता है ।

मुझे पता है कि बैश स्क्रिप्ट पर एक्सटेंशन का उपयोग करने के लिए और उसके खिलाफ कई बार यह पहले ही कहा जा चुका है, लेकिन एक्सटेंशन का उपयोग क्यों या क्यों नहीं करना है, लेकिन मेरे पास वह है जो मैं अंगूठे का एक अच्छा नियम मानता हूं।

यदि आप प्रकार हैं जो सामान्य रूप से टर्मिनल के अंदर और बाहर का उपयोग करते हैं और टर्मिनल का उपयोग नहीं करने वाले किसी अन्य व्यक्ति के लिए एक टूल विकसित कर रहे हैं, तो .shअपने बैश स्क्रिप्ट पर एक्सटेंशन डालें । इस तरह, स्क्रिप्ट को चलाने के लिए उस स्क्रिप्ट के उपयोगकर्ताओं के पास GUI फ़ाइल ब्राउज़र में उस फ़ाइल पर डबल-क्लिक करने का विकल्प होता है।

यदि आप टाइप करते हैं, जो टर्मिनल में मुख्य रूप से आपके सभी या अधिकांश काम करता है, तो अपनी बैश स्क्रिप्ट पर कोई एक्सटेंशन डालने से परेशान न हों। वे टर्मिनल में बिना किसी उद्देश्य के काम करेंगे, यह मानते हुए कि आपने अपनी ~/.bashrcफ़ाइल को निर्देशिकाओं से अलग-अलग स्क्रिप्ट्स में अंतर करने के लिए पहले ही सेट कर दिया है ।

संपादित करें:

4 सरल फ़ाइलों के साथ सूक्ति Nautilus फ़ाइल ब्राउज़र में (प्रत्येक फ़ाइल निष्पादित करने के लिए दी गई अनुमतियों के साथ) एक टर्मिनल विंडो खोलने के लिए मूर्खतापूर्ण सरल बैश कमांड के साथ ( gnome-terminal):

  1. #!/bin/bashपहली लाइन पर नो एक्सटेंशन वाली फाइल ।

    यह फ़ाइल पर डबल-क्लिक करके काम करता है।

  2. पहली लाइन पर .shएक्सटेंशन वाली फाइल #!/bin/bash

    यह फ़ाइल पर डबल-क्लिक करके काम करता है।

  3. #!/bin/bashपहली पंक्ति पर NO के साथ NO एक्सटेंशन वाली फाइल ।

    यह फ़ाइल पर डबल-क्लिक करके काम किया ... तकनीकी रूप से, लेकिन जीयूआई ने कोई संकेत नहीं दिया कि यह एक शेल स्क्रिप्ट थी। इसने कहा कि यह सिर्फ एक सादा पाठ फ़ाइल थी।

  4. पहली पंक्ति पर .shNO के साथ एक्सटेंशन वाली फाइल #!/bin/bash

    यह फ़ाइल पर डबल-क्लिक करके काम करता है।

हालाँकि, केथ थॉम्पसन के रूप में, इस उत्तर की टिप्पणियों में, समझदारी से इंगित किया गया था, .shफ़ाइल की पहली पंक्ति पर बैश शेबंग के बजाय विस्तार का उपयोग करने पर भरोसा करना ( #!/bin/bash) यह समस्या पैदा कर सकता है।

एक और हालांकि, मुझे याद है कि जब मैं पहले मैकओएस का उपयोग कर रहा था, तब भी ठीक से शेबड किया गया था (क्या यह एक शब्द है?) बिना .shएक्सटेंशन के बैश स्क्रिप्ट को मैकओएस पर जीयूआई से नहीं चलाया जा सकता था। मुझे लगता है कि टिप्पणी में उस पर मुझे सही करने के लिए किसी के लिए प्यार होता। अगर यह सच है, तो यह साबित होगा कि .shएक्सटेंशन के मामलों में कम से कम एक फ़ाइल ब्राउज़र है।


आप कौन से GUI फ़ाइल ब्राउज़र का उपयोग करते हैं (या, अधिक प्रासंगिक रूप से, आपके उपयोगकर्ता क्या उपयोग करते हैं)? क्या यह स्क्रिप्ट को चलाने के तरीके का विस्तार करने के लिए उपयोग करता है?
कीथ थॉम्पसन

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

यदि आपके पास एक .shप्रत्यय के साथ एक निष्पादन योग्य स्क्रिप्ट है और #!/bin/bashपहली पंक्ति पर है, तो GUI फ़ाइल ब्राउज़र shइसे लागू करने के लिए उपयोग करने जा रहा है (शेल्बर की अनदेखी)? यदि हां, तो इससे कुछ समस्याएं हो सकती हैं। (उत्तर अलग-अलग ब्राउज़रों के लिए अलग हो सकता है।)
कीथ थॉम्पसन

वहां अच्छे अंक मिले। मैंने अपने उत्तर को कुछ वास्तविक परीक्षण के साथ अद्यतन किया है जो मैंने अभी किया था।
रयान हार्ट

दिलचस्प है, लेकिन ... आपने कहा कि यह "काम" है। 4 परीक्षण मामलों में से प्रत्येक के लिए, यह जानना अच्छा होगा कि क्या उसने इसे लागू किया है /bin/bashया /bin/sh(बाद वाली कोई स्क्रिप्ट के साथ डिफ़ॉल्ट नहीं है)। यदि /bin/shकोई सिम्लिंक है /bin/bash(जो काफी सामान्य है) तो आप के मूल्य को देखकर बता सकते हैं $0। (इसके अलावा, अगर बैश को shइसके सेट के रूप में लागू किया जाता है POSIXLY_CORRECT=y।)
कीथ थॉम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.