2014-12-09 11 views
7

बैश ट्रैप फ़ंक्शन में कॉलर बिल्टिन का उपयोग करते समय, 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 का उपयोग कर। क्या जाल हैंडलर से असफल फ़ंक्शन की असली लाइन संख्या प्राप्त करने का कोई तरीका है?

+0

'BASH_LINENO' सरणी आपका मित्र है। (इसलिए 'FUNCNAME' और 'BASH_SOURCE' हैं)। –

+0

@ चार्ल्सडफी दुर्भाग्यवश 'BASH_LINENO'' कॉलर 0': '1' – Xenopathic

+0

के समान ही चीज़ देता है ... और इस मामले के लिए 'ट्रैफिक' त्रुटि" $ LINENO "'है। सचमुच, मैंने कभी भी इस तरह इस्तेमाल किए गए एक्स्टिट जाल को नहीं देखा है - आप शायद व्यवहार को मार रहे हैं जो कभी भी परीक्षण करने के लिए परेशान नहीं है। एक ईआरआर जाल का उपयोग करना बहुत कम असामान्य होगा। –

उत्तर

3

यह एक बग कुछ समय शुरू होने के बाद 3.2.57 (1) -release प्रकट होता है:

$ bash -version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14) 
Copyright (C) 2007 Free Software Foundation, Inc. 

$ bash ./test.sh 
3 foo ./test.sh 
6 bar ./test.sh 
15 main ./test.sh 

$ /usr/local/bin/bash --version 
GNU bash, version 4.3.30(1)-release (x86_64-apple-darwin14.1.0) 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 

This is free software; you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 

$ /usr/local/bin/bash ./test.sh 
1 foo ./test.sh 
6 bar ./test.sh 
15 main ./test.sh 

वहां पहले से ही बैश परियोजना के साथ एक bug report हो रहा है।

+0

हाल ही में इसमें शामिल हों। यह जानकर खुशी हुई कि क्यों ... –

+0

[ईआरआर और रिटर्नर्न जाल में बग अब तय किए गए हैं] (http://lists.gnu.org/archive/html/bug-bash/2015-02/msg00132.html) – Manubhargav

+0

ऐसा लगता है कम से कम मेरे परीक्षण में तय किया गया है। –

संबंधित मुद्दे