Michael Potter wrote:
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).
----
This seems to work unless I'm missing something...
#!/bin/bash
set -o errexit -o noclobber -o nounset -o pipefail
function traperr
{
echo "TRAPERROR: ${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 -n "Test one: "
pipesave=$(set +o |grep pipefail)
set +o pipefail
cat /etc/passwd |while read aLine; do
# note: ending following 'test=' line with a "|true" will
# stop failure from occurring or being detected, if this is
# what you want..., if not, then set -o pipefile and it
# will 'fail' if any are false.
test=$(true | false | true |false)
done
test "$?" != 0 && exit 47
$pipesave # set pipesave back to original value
echo -n "ONE Ok; Test two: "
while read aLine; do
test=$(true | false | true |false);
done </etc/passwd
echo "TWO"
test=$(true | false | true |false);
echo "END"
exit 0