On Wed, May 06, 2020 at 02:54:38PM +0200, Johannes Schindelin wrote: > On Wed, 6 May 2020, Carlo Marcelo Arenas Belón wrote: > > diff --git a/t/test-lib.sh b/t/test-lib.sh > > index 1b221951a8..a8f8e4106b 100644 > > --- a/t/test-lib.sh > > +++ b/t/test-lib.sh > > @@ -676,15 +676,9 @@ die () { > > } > > > > file_lineno () { > > - test -z "$GIT_TEST_FRAMEWORK_SELFTEST" && test -n "$BASH" || return 0 > > - local i > > - for i in ${!BASH_SOURCE[*]} > > - do > > - case $i,"${BASH_SOURCE[$i]##*/}" in > > - 0,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:$LINENO: ${1+$1: }"; return;; > > - *,t[0-9]*.sh) echo "t/${BASH_SOURCE[$i]}:${BASH_LINENO[$(($i-1))]}: ${1+$1: }"; return;; > > - esac > > - done > > + test -z "$GIT_TEST_FRAMEWORK_SELFTEST" || return 0 > > + > > + echo "$0:$LINENO: ${1+$1: }" > > That suppresses the error all right. > > Unfortunately, it completely breaks the feature. At that point, `$LINENO` > is either unset (e.g. in `dash`) or it contains the number of the line > _containing the `echo`. That is totally useless information at this point, > we want the line number of the caller. that seems like a bug in dash, which NetBSD sh doesn't have, as LINENO wouldn't be unset. > Try this, for example: > > ``` > #!/bin/sh > > file_lineno () { > echo "$0:$LINENO: hello" > } > > file_lineno > ``` > > When you run this, it will print `4`. What we want is `7`. so you need instead : ``` #!/bin/sh file_lineno () { echo "$0:$1: hello" } file_lineno $LINENO ``` > Even worse, as `$0` does _not_ contain `test-lib.sh` at this point, the > printed information is totally bogus. not sure I understand what you mean here, at least when runnning with bash the original code shows $0 correctly as t????.sh when I tried to force a failure to test. Carlo