[x3d-public] Bash function to catch return value

John Carlson yottzumm at gmail.com
Sun Jul 23 01:00:16 PDT 2023


Thanks, Leonard, you helped a lot. Here's what I came up with (not fully
tested).

function exit_on_failure() {
        local status=$1;
        local message=$2;
        local goodstatus=$3;
        local goodmessage=$4;
        if [[ $status -ne 0 && -z "$goodstatus" && $status -ne $goodstatus
]]
        then
                echo $message 1>&2
                exit $status
        elif [[ "$status" = "$goodstatus" ]]
        then
                echo $goodmessage 1>&2
        fi
}

Here's usage:
# copy downloaded zips into input folder to prepare for unpacking
cp "$INPUTZIP" ${INPUTDIR}
exit_on_failure $? "Failed to copy ${INPUTZIP} to ${INPUTDIR}"
cp "$LOCATIONZIP" ${INPUTDIR}
exit_on_failure $? "Failed to copy ${LOCATIONZIP} to ${INPUTDIR}"
cp "$VERTFILE" "${VERTICES}"
exit_on_failure $? "Failed to copy ${VERTFILE} to ${VERTICES}"

# move to input folder and unzip files.
cd $INPUTDIR
# unpack zip files
unzip "$ZIPNAME"
exit_on_failure $? "install unzip" 2 "Possible success"
unzip "$LOCATIONZIP"
exit_on_failure $? "install unzip" 2 "Possible success"
cd ..

On Sat, Jul 22, 2023 at 9:01 PM Leonard Daly <Leonard.Daly at realism.com>
wrote:

> Not sure why you would want a script as this is almost always done in-line.
>
> $? contains the exit status. 0 is almost always success (I don't know
> where it is not) and != 0 is failure. Error message is written to STDERR
> unless you direct a command to fail silently.
>
> So something like
>
> (A | B | C ...) 2> /tmp/pipe-$$.err
> if [ $? -ne 0 ]
> then
>   exitCode=$?
>   cat /tmp/pipe-$$.err
>   exit $exitCode
> fi
>
> Passing the piped command to a function can be dangerous/difficult because
> of shell interpolation and quoting. Also note that the piped output
> (STDOUT) is printed on the default (at the time of the pipe) output
> (probably console), and pipe-$$.err is never cleaned up (deleted). That is
> not really bad because most systems delete files after 24-48 hours in /tmp.
> If there are no errors, then /tmp/pipe-$$.err is never created.
>
> Additional useful info:
> https://unix.stackexchange.com/questions/164482/pipe-redirect-a-group-of-commands
>
> Leonard Daly
>
>
>
> On 7/21/2023 10:15 PM, John Carlson wrote:
>
> Linux folks:
>
> Does anyone have a bash function (not a separate script) to check the exit
> status of the passed in  pipeline or passed in exit status, print out the
> passed in error message, and exit the script if the exit status indicates
> failure?
>
> Thanks!
>
> Should be fairly easy to write?
>
> John
>
> _______________________________________________
> x3d-public mailing listx3d-public at web3d.orghttp://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
> --
> *Leonard Daly*
> 3D Systems Engineering
> President, Daly Realism - *Creating the Future*
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20230723/ec886018/attachment.html>


More information about the x3d-public mailing list