bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

'set -e' and 'trap 0' togheter does not work as expected on syntax error


From: Stefano Lattarini
Subject: 'set -e' and 'trap 0' togheter does not work as expected on syntax errors
Date: Wed, 19 Aug 2009 18:07:58 +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 the 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

---






reply via email to

[Prev in Thread] Current Thread [Next in Thread]