Re: ERR trap inheritance in command substitution

2010-01-10 Thread DennisW
On Jan 8, 11:50 am, Stefan Götz stefan.go...@cs.rwth-aachen.de
wrote:
 Hi!

 It seems that in bash version 4.0.33(1)-release (i486-pc-linux-gnu) (from 
 Ubuntu
 9.04), ERR traps are not inherited by functions that are called via command
 substitution. I expected inheritance to apply in this case since the
 documentation of 'set -E' promises inheritance of the ERR trap for subshell
 contexts. The script below illustrates this behavior as the trap action
 err_handler() is not called.

 Is this behaviour intended? Even if so, I'd like to say that I would find ERR
 trap inheritance for command substitution extremely useful :-)

 Cheers,
         Stefan

 #!/bin/bash

 err_handler() {
   echo THERE WAS AN ERROR

 }

 set -E
 trap 'err_handler' ERR

 myfunc() {
   false # fails to cause an ERR trap
   true

 }

 FOO=$(myfunc)
 exit 0

  signature.asc
  1KViewDownload

Change your error handler to output to stderr:

err_handler() {
  echo THERE WAS AN ERROR 2
}


ERR trap inheritance in command substitution

2010-01-08 Thread Stefan Götz
Hi!

It seems that in bash version 4.0.33(1)-release (i486-pc-linux-gnu) (from Ubuntu
9.04), ERR traps are not inherited by functions that are called via command
substitution. I expected inheritance to apply in this case since the
documentation of 'set -E' promises inheritance of the ERR trap for subshell
contexts. The script below illustrates this behavior as the trap action
err_handler() is not called.

Is this behaviour intended? Even if so, I'd like to say that I would find ERR
trap inheritance for command substitution extremely useful :-)

Cheers,
Stefan

#!/bin/bash

err_handler() {
  echo THERE WAS AN ERROR
}

set -E
trap 'err_handler' ERR

myfunc() {
  false # fails to cause an ERR trap
  true
}

FOO=$(myfunc)
exit 0




signature.asc
Description: OpenPGP digital signature


Re: ERR trap inheritance in command substitution

2010-01-08 Thread Chet Ramey
On 1/8/10 12:50 PM, Stefan Götz wrote:
 Hi!
 
 It seems that in bash version 4.0.33(1)-release (i486-pc-linux-gnu) (from 
 Ubuntu
 9.04), ERR traps are not inherited by functions that are called via command
 substitution. I expected inheritance to apply in this case since the
 documentation of 'set -E' promises inheritance of the ERR trap for subshell
 contexts. The script below illustrates this behavior as the trap action
 err_handler() is not called.
 
 Is this behaviour intended? Even if so, I'd like to say that I would find ERR
 trap inheritance for command substitution extremely useful :-)
 
 Cheers,
   Stefan
 
 #!/bin/bash
 
 err_handler() {
   echo THERE WAS AN ERROR
 }
 
 set -E
 trap 'err_handler' ERR
 
 myfunc() {
   false # fails to cause an ERR trap
   true
 }
 
 FOO=$(myfunc)
 exit 0

How does this script demonstrate that err_handler is not called?  The
command substitution swallows all the output, and you never look at
the results.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/