मैं एक bash सब-रन चलाना चाहता हूं, (1) कुछ कमांड्स रन करता हूं, (2) और फिर उस सब-सब्सक्रिप्शन में रहता हूं जो मैं चाहता हूं। मैं इनमें से प्रत्येक को व्यक्तिगत रूप से कर सकता हूं:
-cध्वज का उपयोग करके कमांड चलाएं :$> bash -c "ls; pwd; <other commands...>"हालाँकि, यह कमांड निष्पादित होने के तुरंत बाद "सुपर" शेल में वापस आ जाता है। मैं भी सिर्फ एक इंटरैक्टिव उपधारा चला सकते हैं:
नई
bashप्रक्रिया शुरू करें :$> bashऔर जब तक मैं स्पष्ट रूप से नहीं कहूंगा, तब तक यह सब से बाहर नहीं निकलेगा ... लेकिन मैं कोई प्रारंभिक आदेश नहीं चला सकता। निकटतम समाधान मैंने पाया है:
$> bash -c "ls; pwd; <other commands>; exec bash"जो काम करता है, लेकिन जिस तरह से मैं चाहता था, वह नहीं है, क्योंकि यह दिए गए आदेशों को एक उपधारा में चलाता है, और फिर बातचीत के लिए एक अलग खोलता है।
मैं एक ही लाइन पर यह करना चाहता हूं। एक बार जब मैं सदस्यता से बाहर निकल जाता हूं, तो मुझे बिना घटना के नियमित "सुपर" शेल पर वापस लौटना चाहिए। एक रास्ता होना चाहिए ~~
NB: मैं क्या नहीं पूछ रहा हूँ ...
- यह नहीं पूछ रहा कि बैश मैन पेज की पकड़ कहां से लाएं
- यह नहीं पूछ रहा कि फाइल से कमांड को कैसे पढ़ना है ... मुझे पता है कि यह कैसे करना है, यह वह समाधान नहीं है जिसकी मुझे तलाश है
- tmux या gnu स्क्रीन का उपयोग करने में रुचि नहीं है
- इसके संदर्भ में दिलचस्पी नहीं है। यानी, प्रश्न का अर्थ सामान्य होना है, न कि किसी विशेष उद्देश्य के लिए
- यदि संभव हो तो, मैं वर्कअराउंड का उपयोग करने से बचना चाहता हूं जो कि मैं चाहता हूं, लेकिन एक "गंदे" तरीके से पूरा करें। मैं सिर्फ एक लाइन पर यह करना चाहता हूं। विशेष रूप से, मैं ऐसा कुछ नहीं करना चाहता
xterm -e 'ls'
exec bashसमाधान में दो अलग-अलग उपधारा शामिल हैं। मुझे एक निरंतर उपधारा चाहिए।
execयह है कि यह पहली उपधारा को दूसरे के साथ बदल देता है, इसलिए आपको केवल माता-पिता के नीचे 1 शेल छोड़ दिया जाता है। यदि आपकी इनिशियलाइज़ेशन कमांड पर्यावरण चर बनाती है, तो वे निष्पादित शेल में मौजूद होंगे।
execयह है कि आप कुछ भी खो देते हैं जो पर्यावरण के माध्यम से उप-श्रेणियों में नहीं जाता है, जैसे कि गैर-निर्यात किए गए चर, फ़ंक्शन, उपनाम, ...
exec bashसमाधान आपके लिए अनुपयुक्त है?