> Le 3 mai 2020 à 18:11, Akim Demaille <a...@lrde.epita.fr> a écrit : > > +if diff perfect effective >/dev/null 2>&1; then > + # Alles ist gut. > +elif diff ok effective >/dev/null 2>&1; then This is wrong, the shell grammar does not accept empty statements here. So bistromathic.log actually contains examples/c/bistromathic/bistromathic.test: line 45: syntax error near unexpected token `elif' but the test "passes" anyway. I'm installing this. Maybe some more portability issues in the bistro example were hidden by this bug. commit cb9f4cb5439adc33f877f134e87b9b2233416c17 Author: Akim Demaille <akim.demai...@gmail.com> Date: Tue May 5 08:08:25 2020 +0200 examples: fix handling of syntax errors The shell grammar does not allow empty statements in then/else part of an if, but examples/test failed to catch the syntax errors from the script it ran. So exited with success anyway. You would expect 'set -e' to suffice, but with bash 3.2 actually it does not. As a matter of fact, I could find a way to have this behave properly: $ cat test.sh set -e cleanup () { status=$? echo "cleanup: $status" exit $status } trap cleanup 0 1 2 13 15 . $1 s=$? echo "test.sh: $s" exit $s $ cat bistro.test if true; then fi $ /bin/sh ./test.sh ./bistro.test ./bistro.test: line 2: syntax error near unexpected token `fi' cleanup: 0 $ echo $? 0 Remove the set -e (or the trap), and tada, it works... So we have to deal with the error by hand. * examples/test ($exit): Replace with... ($status): this. Preserve the exit status of the test case. * examples/c/bistromathic/bistromathic.test: Fix syntax error. diff --git a/examples/c/bistromathic/bistromathic.test b/examples/c/bistromathic/bistromathic.test index 0f0b7898..3bb83b77 100755 --- a/examples/c/bistromathic/bistromathic.test +++ b/examples/c/bistromathic/bistromathic.test @@ -43,6 +43,7 @@ echo '0' | prog >effective if diff perfect effective >/dev/null 2>&1; then # Alles ist gut. + strip_prompt=false elif diff ok effective >/dev/null 2>&1; then strip_prompt=true else diff --git a/examples/test b/examples/test index 3bf6edd4..c80e919e 100755 --- a/examples/test +++ b/examples/test @@ -25,7 +25,7 @@ medir=$(dirname "$1" | sed -e 's,.*examples/,,') number=1 # Exit status of this script. -exit=true +status=0 # top_builddir. cwd=$(pwd) @@ -141,20 +141,20 @@ run () sed -e 's/^/ /' eff echo "$me: diff:" diff -u exp eff | sed -e 's/^/ /' - exit=false + status=1 fi else echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)" cat err_eff - exit=false + status=1 fi number=$(expr $number + 1) } # We have cd'd one level deeper. case $1 in - /*) . "$1";; - *) . "../$1";; + /*) . "$1" || status=2;; + *) . "../$1" || status=2;; esac -$exit +exit $status