[vox-tech] bash, short circuit logic, and errexit

Harold Lee harold at hotelling.net
Fri Jan 18 11:50:45 PST 2008


This page seems to clarify that behavior

     http://www.ss64.com/bash/set.html

saying that statements in while loops or && chains don't cause the  
script to exit on failure. Seems sensible since those are designed to  
give different behavior depending on the exit status of commands. You  
can always check the $? variable and exit based on that (yeah, makes  
the script longer, which is probably what you're trying to avoid with  
"set -e" -- sorry).

-Harold

On Jan 18, 2008, at 11:08 AM, Bryan Richter wrote:

> Does everyone agree that the following script shouldn't last forever?
> And if you agree, does it last forever nonetheless?
>
> ----------
> #!/bin/bash
>
> set -e
>
> false && false;
>
> while true; do
>    echo "Still here"
>    sleep 1
> done
>
> ---------
>
> I discovered that 'diff -q $file1 $file2 && echo "no differences"'
> wasn't ending my script, in spite of having 'set -e'. From the example
> above, which does last forever, it looks like all short-circuit logic
> confounds it.
>
> bash 3.00.15(1)-release
>
> Red Hat Enterprise Linux ES release 4 (Nahant Update 4)
>
>
>
> -- 
> Bryan Richter
> aka chreekat
> _______________________________________________
> vox-tech mailing list
> vox-tech at lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech


More information about the vox-tech mailing list