script1.sh:बैश: जब बच्चे स्क्रिप्ट SIGINT जाल करता है तो मूल स्क्रिप्ट SIGINT पर क्यों समाप्त नहीं होती है?
#!/bin/bash
./script2.sh
echo after-script
script2.sh:
#!/bin/bash
function handler {
exit 130
}
trap handler SIGINT
while true; do true; done
जब मैं एक टर्मिनल से script1.sh शुरू, और फिर अपनी प्रक्रिया समूह के लिए SIGINT भेजने के लिए Ctrl + C का उपयोग करें, संकेत script2.sh द्वारा फंस गया है और जब script2.sh समाप्त हो जाता है, script1.sh प्रिंट करता है "बाद-स्क्रिप्ट"। हालांकि, मैं script2.sh को आमंत्रित करने वाली लाइन के बाद तुरंत समाप्त होने के लिए script1.sh की अपेक्षा करता। इस उदाहरण में यह मामला क्यों नहीं है?
अतिरिक्त टिप्पणी (संपादित करें):
script1.sh और script2.sh के रूप में एक ही प्रक्रिया समूह में हैं, SIGINT दोनों लिपियों के लिए भेजा जाता है जब Ctrl + C कमांड लाइन पर दबाया जाता है । यही कारण है कि मैं script1.sh को जारी रखने की उम्मीद नहीं करता जब script2.sh बाहर निकलता है।
जब लाइन "जाल हैंडलर SIGINT" script2.sh में बाहर टिप्पणी की है, script1.sh बाहर निकलने के तुरंत बाद script2.sh मौजूद है। मैं जानना चाहता हूं कि यह अलग-अलग क्यों व्यवहार करता है, क्योंकि script2.sh केवल उसी निकास कोड (130) उत्पन्न करता है।
शायद 'set -e' का उपयोग करें? – phs