यह एक देर का जवाब है, लेकिन मुझे एक ही समस्या थी और Google ने मुझे इस पृष्ठ पर भेजा, इसलिए यहां पूर्णता के लिए मुझे समस्या के आसपास कैसे मिला।
जहां तक मैं बैश को बता सकता हूं, उसके पास मूल पोस्टर क्या करना चाहता था, करने का विकल्प नहीं है। कमांड निष्पादित किए जाने के बाद -c विकल्प हमेशा वापस आ जाएगा।
टूटी समाधान: इस के आसपास सबसे सरल और स्पष्ट प्रयास है:
bash -c 'XXXX ; bash'
यह आंशिक रूप से (एक अतिरिक्त उप खोल परत के साथ यद्यपि) काम करता है। हालांकि, समस्या यह है कि जब एक सब-शैल निर्यातित पर्यावरण चर का उत्तराधिकारी होगा, उपनाम और कार्य विरासत में नहीं हैं। तो यह कुछ के लिए काम कर सकता है लेकिन एक सामान्य समाधान नहीं है।
बेहतर: इस के चारों ओर जिस तरह से गतिशील रूप से एक स्टार्टअप फ़ाइल बनाने और इस नए आरंभीकरण फ़ाइल के साथ बैश कहते हैं, कि अपने नियमित रूप से ~/यदि आवश्यक हो तो .bashrc अपने नए init फ़ाइल कॉल सुनिश्चित करने के लिए है।
# Create a temporary file
TMPFILE=$(mktemp)
# Add stuff to the temporary file
echo "source ~/.bashrc" > $TMPFILE
echo "<other commands>" >> $TMPFILE
echo "rm -f $TMPFILE" >> $TMPFILE
# Start the new bash shell
bash --rcfile $TMPFILE
अच्छी बात यह है कि अस्थायी init फ़ाइल, जैसे ही यह प्रयोग किया जाता है खुद को नष्ट करेगा जोखिम है कि यह सही ढंग से साफ नहीं है को कम करने के लिए है।
नोट: मुझे यकीन नहीं है कि/etc/bashrc को आमतौर पर सामान्य गैर-लॉगिन खोल के हिस्से के रूप में जाना जाता है।यदि ऐसा है तो आप स्रोत/etc/bashrc के साथ-साथ अपने ~/.bashrc को भी स्रोत बनाना चाहते हैं।
मैं उपनाम के बारे में अंतिम भाग समझ में नहीं आता। उपनाम वर्तमान खोल के संदर्भ में निष्पादित होते हैं, इसलिए उन्हें समस्या नहीं होती है जिसे आप हल करने के लिए कह रहे हैं (हालांकि आमतौर पर, कार्य कई कारणों से उपनामों से बेहतर होते हैं)। – tripleee
मैं अपने .bashrc में 'alias शॉर्टकट =' bash -lic "कुछ_command" '' जैसे कुछ डालने में सक्षम होना चाहता हूं, फिर 'शॉर्टकट' चलाएं और 'some_command' के साथ एक नया खोल पहले से ही इसमें भाग गया है। –