क्या मुझे .sh एक्सटेंशन के साथ अपनी स्क्रिप्ट को सहेजना चाहिए?


66

मेरे पास कुछ कार्यात्मक स्क्रिप्ट हैं और मैं /usr/binउनकी प्रतिलिपि बनाना चाहता हूं ताकि मैं उन्हें सामान्य टर्मिनल कमांड के रूप में उपयोग करना चाहता हूं। क्या .shविस्तार के साथ उनका उपयोग करना अच्छा है या मैं उन्हें बिना विस्तार के बचा सकता हूं?


6
यदि आप चाहते हैं कि वे स्क्रिप्ट सभी उपयोगकर्ताओं के लिए उपलब्ध हों, तो /usr/local/binबेहतर विकल्प हो सकता है।
सेलम

6
@ सलाम /usr/binऔर /usr/local/binदोनों सभी उपयोगकर्ताओं के लिए उपलब्ध होना चाहिए, लेकिन /usr/local/binउन निष्पादनयोग्य लोगों के लिए बेहतर है जो पैकेज का हिस्सा नहीं हैं।
गेरिट

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

1
@ अगर मुझे शेबबंग #!/usr/bin/env bashया करने के लिए सेट है, तो मैं बिना एक्सटेंशन के सिंटैक्स हाइलाइटिंग प्राप्त कर सकता हूं #!/bin/bash
स्पार्कवाक

@ शेखर वास्तव में लेकिन मैं अक्सर इसे भूल जाता हूं जब तक मैं स्क्रिप्ट को चलाने की कोशिश नहीं करता;)
रथ

जवाबों:


71

नहीं, यह एक अच्छा अभ्यास नहीं है, आपको अपनी स्क्रिप्ट को बिना विस्तार के रखना चाहिए। ध्यान दें, कि लिपियों का हिस्सा होने वाली स्क्रिप्ट में .sh एक्सटेंशन नहीं है , यानी अपडेट-ग्रब , अपडेट-grub.sh नहीं । यदि आप अभी भी आश्वस्त नहीं हैं, तो सलाह दें, कि Google शेल स्टाइल गाइड कहता है:

Executables का कोई एक्सटेंशन (दृढ़ता से पसंदीदा) या .sh एक्सटेंशन नहीं होना चाहिए । पुस्तकालयों में -sh एक्सटेंशन होना चाहिए और निष्पादन योग्य नहीं होना चाहिए।

पुनश्च आपको अपनी स्क्रिप्ट नहीं डालनी है /bin। आप डायरेक्टरी बना सकते हैं ~/binऔर अपनी स्क्रिप्ट वहां रख सकते हैं । निर्देशिका ~/binको $PATHडिफ़ॉल्ट रूप से शामिल किया जाता है, इसलिए वहां रखी गई लिपियों को किसी भी अन्य शेल कमांड के रूप में चलाया जा सकता है।


4
"निर्देशिका ~ / बिन $PATHडिफ़ॉल्ट रूप से शामिल है " - कब से? वैसे भी, ~/.local/binशायद यह एक बेहतर विकल्प है क्योंकि यह एक मानक है।
nyuszika7h

1
आपका मतलब है "पुस्तकालयों में एक .so विस्तार होना चाहिए", ठीक है? श नहीं है।
कीथ वोलेटर्स

3
@KeithWolters पहले, मैं नहीं, लेकिन Google। दूसरा, .sh, not .so, हम शेल स्क्रिप्ट्स की बात कर रहे हैं, बायनेरीज़ की नहीं।

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

1
@ nyuszika7h की जांच करें ~ / .profile ... यदि निर्देशिका मौजूद है तो यह आपके घर में $ $ / बिन सम्मिलित करता है
Corey Goldberg

9

मैं दूसरी सिफारिश उपयोग करने के लिए ~/binजो अपने आप आपके में जुड़ जाता है $PATH, के रूप में सेर्गेई ने कहा। या /usr/local/bin, जो पहले से ही हो सकता है PATH। हालाँकि:

  • आप अपने लिए ऐसा कर रहे हैं। जो भी आपको सहज लगे, उसका उपयोग करें। वास्तव में, मैं कहूंगा कि आप एक्सटेंशन रखें ताकि आपको याद दिलाया जाए कि यह आपकी स्क्रिप्ट है जिसे आप चला रहे हैं, -
  • एक्सटेंशन असामान्य हैं /usr/bin। मेरे सिस्टम में, मुझे केवल दो मिल सकते हैं:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh

    इसलिए यदि आप पैकेजिंग कर रहे हैं, तो निश्चित रूप से एक्सटेंशन को छोड़ दें।


2
~/bin$PATHयदि यह मौजूद है, तो इसे स्वचालित रूप से जोड़ा जाता है, इसे मैन्युअल रूप से जोड़ने की कोई आवश्यकता नहीं है। बस डायरेक्टरी बनाएं, लॉग आउट करें और लॉग इन करें।
सर्गेई

5

बस निम्नलिखित लाइन को फाइल के ऊपर रखें:

#!/bin/bash

तो वह फ़ाइल अपने आप टाइप हो जाएगी: शेल स्क्रिप्ट बिना किसी एक्सटेंशन के!

फ़ाइल करने के लिए निष्पादन की अनुमति देना याद रखें।

स्क्रिप्ट डालने के लिए, जिसे डायरेक्ट कमांड द्वारा चलाया जा सकता है, पर जाएँ: मुझे अपनी स्क्रिप्ट कहाँ रखनी चाहिए ताकि मैं इसे डायरेक्ट कमांड द्वारा चला सकूँ?


2
या यहां तक ​​कि सिर्फ #! / बिन / श अगर आपको पूर्ण बैश शेल की आवश्यकता नहीं है।
फ़्लिकरफ़्लाइट

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