बैश ट्रैप फ़ंक्शन में कॉलर बिल्टिन का उपयोग करते समय, caller 0
का परिणाम गलत लाइन नंबर देता है, हमेशा 1
देता है। उदाहरण के लिए:कॉलर 0 ट्रैप हैंडलर में गलत लाइन नंबर देता है
#!/bin/bash
function foo {
exit 1
}
function bar {
foo
}
function err {
((i = 0))
while caller $i; do
((++i))
done
}
trap err EXIT
bar
निम्नलिखित उत्पादन देता है:
1 foo ./test.sh
6 bar ./test.sh
15 main ./test.sh
जबकि i > 0
के लिए उत्पादन, सही है जब एक जाल हैंडलर यह हमेशा 1
लाइन संख्या के रूप में देने के लिए लगता है में caller 0
का उपयोग कर। क्या जाल हैंडलर से असफल फ़ंक्शन की असली लाइन संख्या प्राप्त करने का कोई तरीका है?
'BASH_LINENO' सरणी आपका मित्र है। (इसलिए 'FUNCNAME' और 'BASH_SOURCE' हैं)। –
@ चार्ल्सडफी दुर्भाग्यवश 'BASH_LINENO'' कॉलर 0': '1' – Xenopathic
के समान ही चीज़ देता है ... और इस मामले के लिए 'ट्रैफिक' त्रुटि" $ LINENO "'है। सचमुच, मैंने कभी भी इस तरह इस्तेमाल किए गए एक्स्टिट जाल को नहीं देखा है - आप शायद व्यवहार को मार रहे हैं जो कभी भी परीक्षण करने के लिए परेशान नहीं है। एक ईआरआर जाल का उपयोग करना बहुत कम असामान्य होगा। –