परीक्षण आदेश [ -t 1 ]
जाँच करता है कि पार्टी के उत्पादन एक टर्मिनल पर है। बाश के अन्य उपयोगों को बाधित किए बिना, टर्मिनल खोलते समय इस लाइन का इरादा स्पष्ट रूप से zsh को चलाने के लिए है। लेकिन यह बहुत बुरी तरह से किया गया है।
फ़ाइल .bashrc
को तीन परिस्थितियों में पढ़ा जाता है:
- जब बैश को एक इंटरैक्टिव शेल के रूप में निष्पादित किया जाता है, अर्थात बैच कमांड निष्पादित करने के बजाय उपयोगकर्ता द्वारा टाइप किए गए कमांड चलाने के लिए।
- जब बैश एक गैर-संवादात्मक खोल होता है जो कि RSH या SSH डेमॉन द्वारा चलाया जाता है (आमतौर पर क्योंकि आप चलाते हैं
ssh host.example.com somecommand
और bash आपका लॉगिन शेल होता है host.example.com
)।
- जब यह स्पष्ट रूप से लागू किया जाता है, उदाहरण के लिए एक उपयोगकर्ता
.bash_profile
( स्टार्टअप फ़ाइलों का बैश विकल्प थोड़ा अजीब है )।
[ -t 1 ]
इंटरैक्टिव गोले का पता लगाने के लिए एक खराब तरीका है। यह संभव है, लेकिन दुर्लभ रूप से, मानक आउटपुट के साथ इंटरैक्टिव रूप से बैश चलाने के लिए एक टर्मिनल पर नहीं जा रहा है। गैर-संवादात्मक शेल में टर्मिनल पर जाने के लिए मानक आउटपुट होना अधिक सामान्य है; एक गैर-संवादात्मक खोल में कोई व्यवसाय नहीं चल रहा है .bashrc
लेकिन दुर्भाग्य से एसएसएच करते हैं। एक बेहतर तरीका है: बैश (और किसी भी अन्य श-स्टाइल शेल) इसे करने के लिए एक अंतर्निहित, विश्वसनीय तरीका प्रदान करता है।
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
तो "लॉन्च zsh अगर यह एक इंटरैक्टिव शेल है" लिखा जाना चाहिए
case $- in
*i*) exec zsh;;
esac
लेकिन यह भी एक अच्छा विचार नहीं है: यह बैश शेल को खोलने से रोकता है, जो कि ज़ीश का उपयोग करने पर भी उपयोगी होता है। इस ब्लॉग पोस्ट के बारे में भूल जाओ और इसके बजाय बस अपने शॉर्टकट को कॉन्फ़िगर करें जो बैश के बजाय zsh चलाने के लिए एक टर्मिनल खोलता है। चीजों को व्यवस्थित न करें, ताकि जब भी आप विंडोज पर बैश एप्लिकेशन खोलें, तो यह अब Zsh शेल के साथ शुरू हो जाए: "जब आप zsh चाहते हैं, तो Zsh एप्लिकेशन खोलें।
bash
पढ़ा जा.bashrc
सकता है इंटरैक्टिव (जैसे होस्ट में उपयोगकर्ता का लॉगिन शेलssh host cmd
कहांbash
है, या स्रोतbash --login -c 'some code'
कहां हैं )। अगर शेल इंटरेक्टिव है तो टेस्ट करने का सही तरीका है।.bash_profile
.bashrc
case $- in *i*)...