[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug with 'set -e' + 'trap 0' + syntax error
From: |
Stefano Lattarini |
Subject: |
bug with 'set -e' + 'trap 0' + syntax error |
Date: |
Thu, 20 Aug 2009 18:23:07 +0200 |
User-agent: |
KMail/1.11.4 (Linux/2.6.26-1-686; KDE/4.2.4; i686; ; ) |
I have the following scripts:
$ cat nobug.sh
trap 'e=$?; [ $e -gt 0 ] && echo "OK" || echo "BAD"; exit $e' 0
# syntax error here
&& true
$ cat bug.sh
set -e
trap 'e=$?; [ $e -gt 0 ] && echo "OK" || echo "BAD"; exit $e' 0
# syntax error here
&& true
I thought that when bash detect a syntax errors in a script,
it would pass a $? != 0 to the code in the exit trap, regardless
of whether `set -e' is active or not.
But if I run bug.sh with either bash-3.2 or bash-4.0, I get:
$ bash bug.sh; echo $?
bug.sh: line 4: syntax error near unexpected token `&&'
BAD
0
On the other hand:
$ bash nobug.sh; echo $?
nobug.sh: line 4: syntax error near unexpected token `&&'
nobug.sh: line 4: `&& true'
OK
2
$ dash bug.sh; echo $? # Debian Alquist shell, version 0.5
bug.sh: 4: Syntax error: "&&" unexpected
OK
2
$ zsh bug.sh; echo $? # Zsh, version 4.3
nobug.sh:4: parse error near `&&'
OK
1
I think this can be classified as a bug in bash (in some
situations, a very nasty one). Please let me know if I
have misunderstood something, or if there is a simple
workaround.
More details about my environment and bash versions follow...
---
Details on operating system:
$ uname -s -r -m -o
Linux 2.6.26-1-686 i686 GNU/Linux
$ lsb_release -i -d -r -c
Distributor ID: Debian
Description: Debian GNU/Linux testing/unstable
Release: testing/unstable
Codename: n/a
$ cat /etc/debian_version
squeeze/sid
---
Details on bash versions:
Bash 4.0
---------------
Installed by hand from official tarball
Complete version string: 4.0.0(1)-release
Information from bashbug [Automatically generated]:
Machine: i686
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:
-DPROGRAM='bash'
-DCONF_HOSTTYPE='i686'
-DCONF_OSTYPE='linux-gnu'
-DCONF_MACHTYPE='i686-pc-linux-gnu'
-DCONF_VENDOR='pc'
-DLOCALEDIR='/opt/bleedingedge/share/locale'
-DPACKAGE='bash'
-DSHELL
-DHAVE_CONFIG_H
-I. -I.. -I../include -I../lib
-g -O2
Machine Type: i686-pc-linux-gnu
Bash Version: 4.0
Patch Level: 0
Release Status: release
Bash 3.2
---------------
Installed from debian package "bash", version "3.2-6"
Complete version string: 3.2.48(1)-release
Information from bashbug [Automatically generated]:
Machine: i486
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:
-DPROGRAM='bash'
-DCONF_HOSTTYPE='i486'
-DCONF_OSTYPE='linux-gnu'
-DCONF_MACHTYPE='i486-pc-linux-gnu'
-DCONF_VENDOR='pc'
-DLOCALEDIR='/usr/share/locale'
-DPACKAGE='bash'
-DSHELL
-DHAVE_CONFIG_H
-I. -I../bash -I../bash/include -I../bash/lib
-g -O2 -Wall
Machine Type: i486-pc-linux-gnu
Bash Version: 3.2
Patch Level: 48
Release Status: release
---
- bug with 'set -e' + 'trap 0' + syntax error,
Stefano Lattarini <=