bug-bash
[Top][All Lists]
Advanced

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

errexit does not exit script in subshells


From: Michael Potter
Subject: errexit does not exit script in subshells
Date: Thu, 31 Jan 2008 11:43:30 -0600

Bash Bunch,

Not surprisingly, bash does not exit the script when an error is detected in
a subshell.

I am hopeful that someone has a solution to this (other than: be careful to
not use subshells).

Here is the test run:
-------------------
./subshellnofail.sh
BEGIN
ERROR: ./subshellnofail.sh 10     <- would like the script to stop here.
ONE
ERROR: ./subshellnofail.sh 10
-------------------

Here is the sample script:
------------------
#!/bin/bash

set -o errexit
set -o noclobber
set -o nounset
set -o pipefail    # if you fail on this line, get a newer version of bash.

function traperr
{
   echo "ERROR: ${BASH_SOURCE[0]} ${LINENO}"
   # exit 1   # does not seem to affect the program.
   # return 1 # does not seem to affect the program.
}

set -o errtrace
trap traperr ERR

echo "BEGIN"

cat /etc/passwd |while read aLine
do
   # in a subshell
   test=$(true | false | true |false);
done

echo "ONE"

while read aLine
do
   # not in a subshell
   test=$(true | false | true |false);
done </etc/passwd

echo "TWO"

test=$(true | false | true |false);

echo "END"

exit 0
-----------------

echo $BASH_VERSION
3.2.17(1)-release


reply via email to

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