विभिन्न शेल में फ़ंक्शन निष्पादित करें


2

मैं आमतौर पर zsh। मैं बैश में एक फ़ंक्शन निष्पादित करना चाहता हूं और अपने मूल शेल पर वापस लौटता हूं। मैं इसे मैन्युअल रूप से कर सकता हूं, लेकिन मैं इसे स्वचालित करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

उदाहरण के लिए, मैं zsh पर हूं। मैं निष्पादित करने के लिए चाहते हैं func, जो एक है function()में bigscript.shफ़ाइल। मैं bigscript.shअपनी फ़ाइल में सोर्सिंग कर रहा हूँ .zshrc मैंने कोशिश की कि फाइल में शेबंग #!/bin/bashको जोड़ा जाए bigscript.sh, लेकिन यह शेल को नहीं बदलता है। मैंने functionएक स्टैंडअलोन function.shफ़ाइल में डालने का एक और तरीका आजमाया और उसमें शेबंग को जोड़ा। इसने काम कर दिया। हालाँकि, मैं फ़ाइलों को छोटी .shफ़ाइलों में तोड़ना नहीं चाहता ।

तो, किसी एकल फ़ंक्शन के लिए शेल बदलने पर कोई सुझाव ..?


@KamilMaciorowski क्षमा करें, टाइपो ..
अक्षयराज

आपको bash"यहां-दस्तावेज़" से इनपुट लेने के लिए शेड्यूल करने में सक्षम होना चाहिए । मैंने इसमें उपयोग नहीं किया है zsh, लेकिन यह सुविधा बहुत अधिक है bash
AFH

जवाबों:


2

आम तौर पर यदि आप किसी बश फ़ंक्शन को निष्पादित करना चाहते हैं, तो आपको बैश दुभाषिया का उपयोग करना होगा। कुछ फ़ंक्शंस zsh में काम कर सकते हैं क्योंकि इसमें एक समान सिंटैक्स है, लेकिन ऐसे मतभेद हैं जो आपको ट्रिपिंग कर सकते हैं। इसे इस्तेमाल करे।

bash -c 'source bigscript.sh && func'

ऐसा करने के साथ कुछ गोटे मिलते हैं। यदि फ़ंक्शन चर या उपनाम सेट कर रहा है, तो वे zsh को दिखाई नहीं देंगे। इसके अलावा, यदि bigscript.shकोई कोड है जो किसी फ़ंक्शन के अंदर नहीं है, तो इसे सोर्सिंग के पूरा होने पर निष्पादित किया जाएगा, इसलिए सावधान रहें। आखिरी चीज जो आप चाहते हैं वह bigscript.shगलती से कुछ फ़ाइलों को हटाने या किसी अन्य अप्रत्याशित परिवर्तन करने के लिए है। यदि bigscript.shआप केवल कार्यों का एक संग्रह है, तो आपको ठीक होना चाहिए। आपका zsh सत्र फ़ंक्शन के रिटर्न / एग्जिट कोड को इकट्ठा करने में सक्षम होगा और किसी भी आउटपुट को यह स्टडआउट को लिखता है।


वास्तव में इसका दूसरा तरीका है। bigscript.shबैश के लिए लिखा गया था। मैं अपने दैनिक विकास के लिए zsh-5.4 का उपयोग कर रहा हूं। इस zsh संस्करण में अभी भी वर्ग कोष्ठक के लिए बग है। इसलिए मैं उस स्क्रिप्ट में कार्यों को निष्पादित करने के लिए बैश का उपयोग करता हूं।
अक्षयराज को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.