On 22/06/10 14:23, Andres P wrote:
Ok, after actually taking the time to install bash3...
$ env -i HOME="$HOME" TERM="$TERM" bash3<<\!
set -o errexit
set -o errtrace
TRIGGERED_ERR() { return $?; }
trap 'TRIGGERED_ERR' ERR
set -o xtrace
var=$(false) || true
echo $?
var=$(false || true) # only way of not triggering it...
echo $?
!
++ false # Subshell false
+++ TRIGGERED_ERR # Ignores outer "|| true"
+++ return 1
+ var=
+ true
+ echo 0
0 # But the entire command line does
# not set off errexit
++ false
++ true # Predictable second subshell...
+ var=
+ echo 0
0
So, if you want to keep the ERR trap then you'll have to modify check_deps so
that it always returns true.
Then you'd have to parse its output, similar to how in_opt_array works.
Horrible kludge, lets drop set -E.
I do not think that dropping 'set -E' completely is the way to go. Just
dropping it around that pacman call is enough.
This is the diff I am proposing:
@@ -382,11 +382,15 @@
}
check_deps() {
- (( $# > 0 )) || return
+ (( $# > 0 )) || return 0
+ # Disable error trap in pacman subshell call as this breaks bash-3.2
compatibility
+ # Also, a non-zero return value is not unexpected and we are manually
dealing them
+ set +E
local ret=0
- pmout=$(run_pacman -T "$@")
- ret=$?
+ pmout=$(run_pacman -T "$@") || ret=$?
+ set -E
+
if (( ret == 127 )); then #unresolved deps
echo "$pmout"
elif (( ret )); then
Allan