टर्मिनल एप्लिकेशन (मैक) को पुनरारंभ किए बिना टर्मिनल से बैश को पुनरारंभ करें?


46

मैंने इस प्रश्न के उत्तर के लिए चारों ओर और बिट को देखा है, लेकिन मुझे यह नहीं लगता है (जो अजीब है)।

मेरा सवाल है, क्या मैक पर टर्मिनल के भीतर से बैश सत्र को पुनरारंभ करने का कोई सरल तरीका है। मैं बस वही व्यवहार चाहता हूं जैसे कि मैंने टर्मिनल एप्लिकेशन को बंद कर दिया और इसे फिर से शुरू कर दिया (सभी चर रीसेट, .bash_profile खट्टा आदि)।

मुझे पता है कि कैसे स्रोत .bash_profile, लेकिन यह वह नहीं है जो मैं चाहता हूं। जिन कारणों से मैं यह करना चाहता हूं, उनमें से एक यह है कि मेरे बैश प्रॉम्प्ट के लिए एक प्लगइन में कोड है जो रंगों को कई बार लोड होने से रोकता है। इसलिए, सोर्सिंग .bash_profile कलर वैरिएबल को फिर से लोड नहीं करता है और मुझे प्रभाव में परिवर्तन प्राप्त करने के लिए टर्मिनल एप्लिकेशन को पुनरारंभ करना होगा।

जवाबों:


64

exec bash वर्तमान शेल प्रक्रिया को (एक नए उदाहरण) बैश के साथ बदलना चाहिए।


2
क्या टर्मिनल एप्लिकेशन में बैश एक इंटरैक्टिव शेल है, और exec bashकेवल उस इंटरैक्टिव शेल को फिर से शुरू करता है ? इसके अलावा, क्या आप वास्तव में समझा सकते हैं कि निष्पादन कमांड क्या करता है और यह विकल्प है? धन्यवाद!
मैटिस

निष्पादन एक नई प्रक्रिया के साथ वर्तमान प्रक्रिया को बदल देता है। बैश में एक बहुत अच्छी तरह से लिखा गया है लेकिन दुर्भाग्य से मैनपेज खोजना मुश्किल है; टाइप करें man bash, स्ट्रिंग शैल बिल्ड कमानों का अंतिम उदाहरण ढूंढें और फिर निष्पादित करने के लिए नीचे स्क्रॉल करें। संक्षेप में, -cझंडे को पास करना बिना किसी पर्यावरण चर के चलेगा (जो आपके उद्देश्यों के लिए आवश्यक हो सकता है, मुझे नहीं पता), और अन्य तर्क -l और -a शायद वे चीजें नहीं हैं जो आप चाहते हैं (वे ऐतिहासिक प्रतीत होते हैं / अस्पष्ट और विशिष्ट विशेषताएं)। यदि आप कमांड को छोड़ते हैं, तो आप वर्तमान शेल में नए फ़ाइल डिस्क्रिप्टर खोलने के लिए भी निष्पादन का उपयोग कर सकते हैं।
मुजेर

क्या आप मौजूदा शेल में नए फ़ाइल डिस्क्रिप्टर खोलने के लिए निष्पादन का उपयोग करने का एक उदाहरण दिखा सकते हैं? और इंटरैक्टिव / लॉगिन शेल के बारे में मेरे सवाल का क्या। क्या शेल टर्मिनल में एक इंटरैक्टिव शेल है, और यह है कि सभी निष्पादन कमांड स्पर्श करता है। अंत में, इस सवाल का स्वीकृत जवाब -l ध्वज के साथ निष्पादन कमांड की सिफारिश करता है, लेकिन मुझे समझ नहीं आता कि यह क्या करता है। इतना पूछने के लिए क्षमा करें, मैं सिर्फ उन आज्ञाओं की समझ रखता हूं जिनका मैं उपयोग करता हूं।
मैटियास

1
क्षमा करें, हाँ। मुझे मैक के बारे में निश्चित नहीं है, लेकिन लिनक्स की दुनिया में कम से कम शेल एक ग्राफ़िकल टर्मिनल से चलते हैं (आमतौर पर) लॉगिन गोले नहीं होते हैं, और आप केवल इंटरेक्टिव शेल को पुनः आरंभ कर रहे हैं न कि टर्मिनल स्वयं या आपके लॉगिन शेल को। -lयहाँ बैश करने का तर्क दिया गया है और यह एक लॉगिन शेल की तरह व्यवहार करता है। वर्तमान शेल में फ़ाइल डिस्क्रिप्टर खोलने का आपके प्रश्न से कोई लेना-देना नहीं है, लेकिन आप exec 4<>test.txtउदाहरण के लिए फ़ाइल डिस्क्रिप्टर 4 को test.txt पर बनाने के लिए उपयोग कर सकते हैं । फिर अपने शेल के बाकी हिस्सों में आप echo test>&4test.txt को आउटपुट कर सकते हैं ।
मुजेर

1
@Muzer उन कारणों के लिए जो मैं नहीं कह सकता कि मैं पूरी तरह से सहमत हूं, OSX ने फैसला किया है कि GUI टर्मिनल एमुलेटर लॉगिन गोले चलाएगा
terdon

1

स्वीकार किए गए उत्तर को शेल का उपयोग करने के लिए बहुत अच्छा है जो बैश का उपयोग कर रहा है, जो कि ओपी ने भी पूछा है, हालांकि, मैं एक गैर-डिफ़ॉल्ट शेल (zsh) के साथ macOS पर टर्मिनल का उपयोग कर रहा हूं और exec bashजाहिर है कि कमांड का वांछित प्रभाव नहीं है। : यह मेरे डिफ़ॉल्ट शेल के बजाय बैश लॉन्च करता है।

तो पर्यावरण-अज्ञेय कमांड वह होगा exec $SHELLजो पर्यावरण चर का उपयोग करता है जो $SHELLउपयोगकर्ता के लिए डिफ़ॉल्ट शेल को संग्रहीत करता है।

इसके अलावा, ध्यान दें कि Apple macOS कैटालिना में zsh के साथ बैश की जगह लेगा ताकि ओपी को exec zshया तो चलने का असर दिखे या फिर macOS exec $SHELL10.15 पर अपडेट होने के बाद जाने का रास्ता बने।

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