यूनिक्स खोल स्क्रिप्ट के लिए फ़ाइल एक्सटेंशन [बंद]


45

विकिपीडिया पर, .sh के लिए लेख कहता है:

.Sh फ़ाइल एक्सटेंशन प्रकार के लिए, बॉर्न शेल देखें ।

कैसे अन्य यूनिक्स गोले के बारे में?

मुझे पता है कि निष्पादन के लिए दुभाषिया को इंगित करने के लिए फ़ाइल के अंदर शेलबैंग का उपयोग किया जाता है , लेकिन मुझे आश्चर्य है:

  • फ़ाइल एक्सटेंशन बनाम फ़ाइल एक्सटेंशन के लिए पेशेवरों और विपक्ष क्या हैं?

4
कभी-कभी, शेलबैंग के बिना शेल स्क्रिप्ट (या निष्पादन अनुमति के बिना) पाया जा सकता है। उस स्थिति में, .sh में समाप्त होने वाला नाम उपयोगकर्ता को bash script.sh(या shनिश्चित रूप से) उन्हें चलाने के लिए संकेत हो सकता है ।
अंसार एसेट्टरमैन

3
यदि किसी शेल स्क्रिप्ट का एक्सटेंशन है तो यह आमतौर पर .sh है। मैंने कभी .ksh या .bash स्क्रिप्ट नहीं देखी है। अधिकांश शेल स्क्रिप्ट का कोई विस्तार नहीं है, उदाहरण के लिए /etc/init.d/* की सभी स्क्रिप्ट की तरह।
रिचर्ड होलोवे

जबकि एक सरलीकृत निष्कर्ष (हां या नहीं) राय है, विचार करने वाली चीजें नहीं हैं।
ctrl-alt-delor

जवाबों:


35

मैं केवल .shकुछ ऐसा कहूंगा जो पोर्टेबल होने का मतलब है (और उम्मीद है कि पोर्टेबल है)।

अन्यथा मुझे लगता है कि भाषा को छिपाना बेहतर है। सावधान पाठक इसे वैसे भी शेबांग लाइन में पाएंगे। (व्यवहार में, .bashया .zsh, आदि ... प्रत्ययों का उपयोग शायद ही कभी किया जाता है।)


1
अकेले इस पृष्ठ से, हम पहले से ही इसका उपयोग करने वाले लोगों की काफी मात्रा में देख सकते हैं। आप क्यों कहते हैं कि वे "शायद ही कभी इस्तेमाल किए जाते हैं"? कोई प्रशस्ति पत्र? या यह केवल आपके अनुभव पर आधारित है?
पचेरियर

23

मैं कहूंगा कि फ़ाइल एक्सटेंशन के लिए कोई "अच्छा व्यवहार" मौजूद नहीं है, कड़ाई से एक तकनीकी पर: यूनिक्स / लिनक्स / * बीएसडी फाइल सिस्टम प्रति एक्सटेंशन एक्सटेंशन का समर्थन नहीं करते हैं। जिसे आप एक एक्सटेंशन कह रहे हैं, वह केवल एक एकल फ़ाइल नाम का एक प्रत्यय है। यह वीएम / सीएमएस, वीएमएस, एमएस-डॉस और विंडोज फाइल सिस्टम और ओएस से अलग है जहां इनोड-नैतिक-समकक्ष का एक विशेष स्थान एक विस्तार के लिए आरक्षित है।

उस छोटे शेख़ी पर अब, मुझे लगता है कि शेल स्क्रिप्ट फ़ाइल नाम पर ".sh" या ".ksh" या ".बैश" प्रत्यय लगाना थोड़ा मूर्खतापूर्ण है। एक प्रोग्राम एक प्रोग्राम है: जो निष्पादित होता है उसे प्रतिष्ठित करने में कोई लाभ मौजूद नहीं है। कोई भी यूनिक्स या लाइनक्स या जो कुछ कर्नेल ने फ़ाइल नाम प्रत्यय के कारण किसी फ़ाइल पर दुभाषिया को कॉल करने का निर्णय लिया है। यह सब #!लाइन द्वारा किया जाता है , या फ़ाइल के आरंभ में कुछ अन्य "मैजिक नंबर" बाइट्स का क्रम होता है। वास्तव में, एक फ़ाइल नाम "एक्सटेंशन" के आधार पर क्या निष्पादित करना है, यह तय करना विंडोज को मैलवेयर चुंबक बनाने वाले कारकों में से एक है। देखें कि कितने विंडोज मालवेयर स्कैम में "something.jpg.exe" नामक फ़ाइल शामिल है - डिफ़ॉल्ट रूप से नए विंडोज ".exe" एक्सटेंशन को नहीं दिखाते हैं, और उपयोगकर्ता को केवल "डबल क्लिक" करने के लिए प्रोत्साहित करते हैं।

जैसा कि आप सीधे-सीधे आदेश के बारे में सोच सकते हैं, वैसे भी अक्सर एक शेल स्क्रिप्ट है। कभी-कभी ccएक श-लिपि रही है, firefoxएक श-लिपि है, startxएक श-लिपि है। मुझे विश्वास नहीं है कि ".sh" प्रत्यय के साथ एक स्क्रिप्ट को चिह्नित करने के लिए एक संज्ञानात्मक या संगठनात्मक लाभ है।


24
मैं असहमत हूं! मेरी नौकरी पैकेजिंग में एक एप्लिकेशन है जिसमें हजारों फाइलें द्विआधारी निष्पादन योग्य से लेकर शेल स्क्रिप्ट (ksh, bash और कुछ विरासत csh) तक हैं। मेरे लिए, मुझे विश्वास है कि यह करता है एक नज़र (या एक regex में) फ़ाइल की तरह क्या हम चर्चा कर रहे हैं और हम के लिए देख रहे हैं में पता करने के लिए सक्षम होने के लिए एक फर्क। मेरे मतलब नहीं है कि हो सकता है भेद क्या excuted हो जाता है और एक में एक लाभ सबसे अच्छा अभ्यास स्पष्ट रूप से फ़ाइल के प्रकार बताते हुए प्रोत्साहित करना चाहिए।
रहमू

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

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

2
@rahmu फ़ाइल प्रकार के निर्धारण के लिए "फ़ाइल" कमांड मौजूद है। यह विभिन्न गोले के लिए लिखी गई लिपियों को भेदने में सक्षम है।
मैट

3
यदि आप शेल स्क्रिप्ट को .shएक्सटेंशन देते हैं, तो आपको .shइसे शुरू करते समय कमांड नाम के भाग के रूप में लिखना होगा। यही मुख्य कारण है कि मुझे वह एक्सटेंशन लगाना पसंद नहीं है (उसी के साथ एक शेबंग लाइन है)। BTW, विंडोज में समस्या .exeप्रति उपसर्ग नहीं है (यह image.jpgलिनक्स में एक निष्पादन योग्य बनाने के लिए तुच्छ है , आखिरकार), लेकिन तथ्य यह है कि विंडोज आमतौर पर उस विस्तार को छिपाता है, इस तथ्य के साथ संयुक्त है कि एक निष्पादन योग्य शुरू करने के लिए आवश्यक कार्रवाई और एक दस्तावेज़ खोलने के लिए बिल्कुल वैसा ही है।
celtschk

12

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


ऐसा लगता है कि unix.stackexchange.com/questions/31760/…
Pacerier

क्या आपके पास #!स्क्रिप्ट की शुरुआत में नहीं है (जैसे #!/bin/bash)?
ctrl-alt-delor

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

@ ctrl-alt-delor: "यूनिक्स" एक ट्रेडमार्क है । ट्रेडमार्क मुद्दे (और पेडेंट) से बचने के लिए लोग अक्सर "निक्स" का उपयोग करते हैं।
जेएस।

@JS `UNIX 'ओपन ग्रुप का एक ट्रेडमार्क है। यूनिक्स और यूनिक्स greens.org/about/unix.html
ctrl-alt-delor

5

जैसा कि आपने कहा, यूनिक्स फाइल एक्सटेंशन पूरी तरह से जानकारी है। आपको बस एक सही शेबंग और निष्पादन योग्य होने के लिए अपनी स्क्रिप्ट की आवश्यकता है।

आप या तो कोई विस्तार या उपयोग कर सकते हैं .sh

मैं व्यक्तिगति का उपयोग करते हुए निम्नलिखित सम्मेलनों का उपयोग करता हूं, (csh, tsh, bash, sh, ...):

  • सिस्टम या उच्च ग्रेड स्क्रिप्ट (अत्यंत दुर्लभ) के लिए कोई विस्तार नहीं।
  • .shक्लासिक स्क्रिप्ट के लिए, उच्च ग्रेड के लिए कम।

"क्लासिक लिपियों, निम्न से उच्च श्रेणी" से आपका क्या अभिप्राय है?
पेसियर

मुझे लगता है कि मैं अमूर्त या संगठन स्तर से मतलब था। क्या आप परवाह नहीं करते हैं कि कुछ कमांड के पीछे किस भाषा / स्क्रिप्ट टूल का उपयोग किया जाता है: इसलिए आप किसी एक्सटेंशन का उपयोग नहीं करते हैं। दूसरों के लिए, यह जानना अच्छा है कि यह बैश या कुछ विदेशी ksh खोल स्क्रिप्ट (उचित विस्तार के साथ) है। ... लेकिन वह 2 साल पहले था;)
11

5

आपको निष्पादनयोग्य के लिए एक्सटेंशन का उपयोग नहीं करना चाहिए, क्योंकि वे विनिमेय नहीं हैं। कल्पना करें कि आपके पास एक शेल स्क्रिप्ट है a.sh, फिर अजगर में फिर से लिखें a.py, आपको अब हर प्रोग्राम को बदलना होगा जो आपको स्क्रिप्ट कहता है, आपने कार्यान्वयन विवरण को लीक कर दिया है।

Mircosoft की विंडोज में पूरी फ़ाइल-नाम एक्सटेंशन चीज़ गड़बड़ है: उदाहरण के लिए जो हो सकता था a.audio, b.audio, c.audio, है a.mp3, b.wav, c.ogg, और d.picture, e.picture, f.pictureहै d.jpeg, e.png, f.gif। अधिकांश समय हम परवाह नहीं करते हैं कि ऑडियो या तस्वीर किस प्रारूप में है। हमें नए उपयोगकर्ताओं को सभी फ़ाइल एक्सटेंशनों को पढ़ाने में एक लंबा समय बिताना होगा।


*.shमेरे द्वारा उपयोग न किए जाने का एक और कारण यह है कि डेबियन run-partsएक्सटेंशन के साथ स्क्रिप्ट नहीं चलाएगा, जैसे कि /etc/cron.*/: आर्काइव.ओरिली
रॉस पैटरसन

3

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

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


ऐसा लगता है कि unix.stackexchange.com/questions/31760/…
Pacerier

2

जैसा कि दूसरों ने कहा है, शेल एक्सटेंशन के बारे में परवाह नहीं करता है। हालाँकि, यह फ़ाइलों की त्वरित मानव पहचान के लिए अनुमति देता है। मुझे फाइलें खत्म होती दिख रही हैं .pyया .shमुझे जल्दी पता है कि उन्हें (कम से कम) क्या होना चाहिए। जैसा कि स्टीव कहते हैं, फ़ाइल एक्सटेंशन द्वारा खोज करना या एक पंक्ति गणना करना भी व्यावहारिक विचार हैं।

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