2014-04-01 8 views
6

निम्नलिखित खोल समारोह पर विचार में एक समारोह के भीतर से एक खोल से बाहर निकलें जाल कैसे निर्धारित करें:zsh और बैश

~$ f 
function 
~$ exit 
trap 

zsh पर लेकिन इस:

f() { 
    echo "function" 
    trap 'echo trap; sleep 1' EXIT 
} 

बैश के तहत इस निम्नलिखित प्रिंट होगा

~$ f 
function 
trap 
~$ exit 

इस रूप में zshbuiltins man page से समझाया गया है: परिणाम है

अगर सिग 0 है या एक्स्टिट है और फंक्शन स्टेटमेंट को फ़ंक्शन के बॉडी के अंदर निष्पादित किया जाता है, तो फ़ंक्शन पूर्ण होने के बाद आदेश तर्क निष्पादित किया जाता है।

मेरा प्रश्न: वहाँ एक EXIT जाल है कि केवल में खोल से बाहर निकलें दोनों बैश और zsh पर निष्पादित स्थापित करने का कोई तरीका है?

+0

? 'जाल' की तरह $ टी 'EXIT; एफ() {टी = 'गूंज जाल; एक समारोह को फिर से परिभाषित करके 1 '}' या शायद अधिक सुंदरता सोएं? – tripleee

+0

दिलचस्प विचार, लेकिन इसका मतलब यह होगा कि बिना किसी बाहरी रूप से बाहर निकलने वाले जाल को स्थापित करना (भले ही यह केवल खाली कार्य हो) - थोड़ा सा "हैकिश" महसूस करता है। – UloPe

उत्तर

5

अनिवार्य उबाऊ और नीरस जवाब:

f() { 
    if [ "$ZSH_VERSION" ] 
    then 
    zshexit() { echo trap; sleep 1; } # zsh specific 
    else 
    trap 'echo trap; sleep 1' EXIT  # POSIX 
    fi 
} 
नहीं एक जगह जहाँ मैं परीक्षण कर सकते हैं, लेकिन क्या आप एक वैश्विक जाल बाहर कार्यों को परिभाषित करता है, तो और उसके बाद फिर से परिभाषित जो कुछ भी यह अपने कार्य के अंदर कॉल में
+0

जो कुछ भी मैं आया था, धन्यवाद। – UloPe

+0

मैं वास्तव में इस के विपरीत चाहता हूं, जाल के लिए ("आखिरकार" खंड) केवल फ़ंक्शन के भीतर ही होगा। जेडएसएच इसका समर्थन करता है, बैश के बारे में निश्चित नहीं है। – CMCDragonkai