मेरे में .profile
, मैं निम्नलिखित कोड का उपयोग यह सुनिश्चित करने के लिए करता हूं कि बैश-संबंधित उपनाम और फ़ंक्शन केवल खट्टे हैं यदि लॉगिन शेल वास्तव में बैस है :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
मैं वर्तमान में अपने शेल कॉन्फ़िगरेशन फ़ाइलों, स्क्रिप्ट और फ़ंक्शंस को संस्करण नियंत्रण में रखने की प्रक्रिया में हूं। मैंने हाल ही में शेल स्क्रिप्ट्स से कैज़ुअल बैशीज़ को हटाने की प्रक्रिया शुरू की है, जो बैश-विशिष्ट सुविधाओं से लाभ नहीं उठाते हैं, जैसे, के function funcname()
साथ प्रतिस्थापित करना funcname()
।
मेरी शेल फाइलों के भंडार के लिए, मैंने प्री-कम हुक को कॉन्फ़िगर किया है जो कि रिपॉजिटरी में प्रत्येक फाइल पर checkbashisms
डेबियन के डिस्क्रिप्टिव पैकेज से उपयोगिता चलाता sh
है ताकि यह सुनिश्चित हो सके कि मैं अनजाने में बैश-विशिष्ट वाक्यविन्यास का परिचय नहीं देता हूं। हालाँकि, यह मेरे लिए एक त्रुटि उत्पन्न करता है .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
मैं सोच रहा था कि क्या कोई तरीका है जो यह जांचने के लिए है कि कोई चेतावनी नहीं चल रही है checkbashisms
।
मैंने POSIX द्वारा सूचीबद्ध शेल-संबंधित चर की सूची इस उम्मीद में जाँची कि उनमें से एक का उपयोग वर्तमान शेल को दिखाने के लिए किया जा सकता है। मैंने एक इंटरैक्टिव डैश शेल में सेट किए गए चर को भी देखा है, लेकिन फिर से, एक उपयुक्त उम्मीदवार खोजने में विफल रहा।
फिलहाल, मैंने इसे .profile
संसाधित होने से बाहर रखा है checkbashisms
; यह एक छोटी फ़ाइल है, इसलिए इसे मैन्युअल रूप से जांचना मुश्किल नहीं है। हालाँकि, इस मुद्दे पर शोध करने के बाद, मैं अभी भी जानना चाहूंगा कि क्या कोई POSIX शिकायत विधि है जो यह निर्धारित करती है कि कौन सा शेल चल रहा है (या कम से कम एक तरीका है जो checkbashisms
विफल होने का कारण नहीं है )।
आगे की पृष्ठभूमि / स्पष्टीकरण
संस्करण नियंत्रण के तहत मैं अपने शेल कॉन्फ़िगरेशन फ़ाइलों को डाल रहा हूं, इसका एक कारण यह है कि मैं वर्तमान समय में नियमित रूप से लॉग इन करने वाली सभी प्रणालियों पर अपने वातावरण को कॉन्फ़िगर करने के लिए हूं: साइगविन, उबंटू और सेंटोस (दोनों 5 और 7 दोनों, उपयोगकर्ता के लिए सक्रिय निर्देशिका का उपयोग करके। प्रमाणीकरण)। मैं अक्सर दूरस्थ होस्ट के लिए एक्स विंडोज / डेस्कटॉप वातावरण और एसएसएच के माध्यम से लॉग ऑन करता हूं। हालाँकि, मैं चाहूंगा कि यह भविष्य का प्रमाण हो और सिस्टम की निर्भरता और अन्य साधनों पर कम से कम निर्भरता हो।
मैं checkbashisms
अपने शेल से संबंधित फ़ाइलों के सिंटैक्स के लिए एक सरल, स्वचालित स्वच्छता जांच के रूप में उपयोग कर रहा हूं । यह एक आदर्श उपकरण नहीं है, उदाहरण के लिए, मैंने पहले ही इस पर एक पैच लागू कर दिया है ताकि यह command -v
मेरी लिपियों के उपयोग के बारे में शिकायत न करे । शोध करते समय, मैंने सीखा है कि कार्यक्रम का वास्तविक उद्देश्य डेबियन नीति का अनुपालन सुनिश्चित करना है, जैसा कि मैं समझता हूं, यह 2008 (या इसके 2013 के संशोधन) के बजाय POSIX 2004 पर आधारित है।
.bash_profile
दोनों स्रोतों को लिखें .profile
और (सशर्त रूप से) .bashrc
।