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

Reply via email to