2012-07-27 16 views
6

मैं एक स्थिति है जहाँ में मैं अपने खोल स्क्रिप्ट उसके बाद एक बाहर निकलने आदेश एक ही स्क्रिप्ट में निष्पादित किया जाता है निष्पादित किया जाना चाहिए में एक कमांड है है में आदेश चलाने के बाद आदेश निष्पादित (मैं जानता हूँ कि !! यह पागल लगता है !!)शैल स्क्रिप्ट: 'प्रस्थान' खोल स्क्रिप्ट

मैं की तरह

#!/bin/sh 
ls -l ~/. 
exit $? 
touch ~/abc.txt 

यहाँ कुछ के लिए एक समाधान मैं चाहता हूँ आदेश touch ~/abc.txt पर अमल के बाद exit $? समाप्त हो गया है और आदेश प्राप्त करना चाहते touch ~/abc.txt हो सकता है कोई आदेश

प्रतिबंध: 1) मैं ऊपर स्क्रिप्ट की exit $? हिस्से को संशोधित नहीं कर सकते। 2) आदेश exit $? कमांड के बाद ही निष्पादित किया जाना चाहिए।

मुझे यकीन नहीं है कि इसके लिए कोई समाधान है या नहीं, लेकिन किसी भी मदद की सराहना की जाती है।

+0

क्या हम जानते हैं कि आप उन पहली पंक्तियों को क्यों संशोधित नहीं कर सकते? – arkascha

+0

क्षमा करें !! मैंने अब अपने प्रश्न के बाधाओं का हिस्सा संपादित किया है। मैं स्क्रिप्ट में कुछ भी बदल सकता हूं लेकिन बाहर निकलने के आदेश को रहना है !! – latestVersion

+0

यदि आप स्क्रिप्ट को संशोधित नहीं कर सकते हैं, तो आप 'touch' कमांड को जोड़ने की अपेक्षा कैसे करते हैं? यदि आप स्क्रिप्ट को संशोधित करते हैं, तो आप इसे 'निकास' से ऊपर क्यों नहीं जोड़ सकते? – Shahbaz

उत्तर

10

ठेठ दृष्टिकोण एक जाल सेट करने के लिए है। कुछ गोले में (उदाहरण के लिए bash), अगर स्क्रिप्ट सिग्नल के परिणाम के रूप में समाप्त हो जाता है, तो जाल भी निष्पादित किया जाएगा, लेकिन दूसरों में (जैसे dash) यह नहीं होगा। आदेश कमांड करने के लिए कोई पोर्टेबल तरीका नहीं है अगर अंतिम आदेश exit था।

+0

धन्यवाद !! इससे मदद मिलती है। – latestVersion

0

मुझे संदेह है कि किसी भी तरह से प्रत्यक्ष तरीका संभव है।

लेकिन कोई कामकाज हो सकता है: क्या आप किसी अन्य प्रक्रिया में निष्पादन स्क्रिप्ट को लपेट सकते हैं? एक बार लिपटे स्क्रिप्ट को बाहर निकलने के बाद आप रैपिंग स्क्रिप्ट में जो कुछ भी चाहते हैं उसे कॉल कर सकते हैं() और स्टैक से हटा दिया जाता है।

1

मुझे नहीं पता कि आप ऐसा कुछ क्यों करना चाहते हैं लेकिन शायद ऐसा कुछ करने का प्रयास करें: अपनी स्क्रिप्ट को किसी अन्य में लपेटें। अपनी मूल लिपि में अपने बच्चे स्क्रिप्ट का मूल्यांकन eval या स्रोत जैसे कमांड के साथ करें, फिर अपने बच्चे स्क्रिप्ट से अंतिम कमांड निकालें और इसे अलग तरीके से निष्पादित करें।

trap 'touch ~/abc.txt' 0 

यह स्पर्श आदेश लागू करेगा जब खोल बाहर निकलता है:

+0

+1: निष्कर्षण चाल इस जवाब को मेरी तुलना में बेहतर बनाती है। – arkascha

+0

जितना मैं चाहता हूं, मैं अपनी स्क्रिप्ट पर एक रैपर का उपयोग नहीं कर सकता क्योंकि मैं vfabric tcServer की "tcruntime-ctl.sh" स्क्रिप्ट को संशोधित कर रहा हूं। – latestVersion

+0

मैं केवल इस स्क्रिप्ट को संशोधित करने के लिए बाध्य हूं! :( – latestVersion

0

यह काम करना चाहिए, भले ही ओपी बाहर निकलना नहीं चाहता था।

#!/bin/sh 
ls -l ~/. 
RES=$?  #save res for later. 
touch ~/abc.txt 
exit $RES