<div dir="ltr"><div dir="ltr"><div dir="ltr">Thanks, Leonard, you helped a lot. Here's what I came up with (not fully tested).<div><br></div><div><div dir="ltr"><span style="background-color:rgb(255,255,255)">function exit_on_failure() {</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> local status=$1;</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> local message=$2;</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> local goodstatus=$3;</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> local goodmessage=$4;</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> if [[ $status -ne 0 && -z "$goodstatus" && $status -ne $goodstatus ]]</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> then</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> echo $message 1>&2</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> exit $status</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> elif [[ "$status" = "$goodstatus" ]]</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> then</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> echo $goodmessage 1>&2</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"> fi</span></div><div dir="ltr"><span style="background-color:rgb(255,255,255)">}</span></div></div><div dir="ltr"><span style="background-color:rgb(255,255,255)"><br></span></div><div><span style="background-color:rgb(255,255,255)">Here's usage:</span></div><div># copy downloaded zips into input folder to prepare for unpacking</div><div><span style="background-color:rgb(255,255,255)"><div>cp "$INPUTZIP" ${INPUTDIR}</div><div>exit_on_failure $? "Failed to copy ${INPUTZIP} to ${INPUTDIR}"</div><div>cp "$LOCATIONZIP" ${INPUTDIR}</div><div>exit_on_failure $? "Failed to copy ${LOCATIONZIP} to ${INPUTDIR}"</div><div>cp "$VERTFILE" "${VERTICES}"</div><div>exit_on_failure $? "Failed to copy ${VERTFILE} to ${VERTICES}"</div><div><br></div><div># move to input folder and unzip files.</div><div>cd $INPUTDIR</div><div># unpack zip files</div><div>unzip "$ZIPNAME"</div><div>exit_on_failure $? "install unzip" 2 "Possible success"</div><div>unzip "$LOCATIONZIP"</div><div>exit_on_failure $? "install unzip" 2 "Possible success"</div><div>cd ..</div></span></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul 22, 2023 at 9:01 PM Leonard Daly <<a href="mailto:Leonard.Daly@realism.com">Leonard.Daly@realism.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>Not sure why you would want a script as this is almost always
done in-line.</p>
<p>$? 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.</p>
<p>So something like<br>
</p>
<pre><font face="monospace">(A | B | C ...) 2> /tmp/pipe-$$.err
if [ $? -ne 0 ]
then
exitCode=$?
cat /tmp/pipe-$$.err
exit $exitCode
fi</font></pre>
<p>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.<br>
</p>
<p>Additional useful info:
<a href="https://unix.stackexchange.com/questions/164482/pipe-redirect-a-group-of-commands" target="_blank">https://unix.stackexchange.com/questions/164482/pipe-redirect-a-group-of-commands</a></p>
<p>Leonard Daly<br>
</p>
<p><br>
</p>
<p><br>
</p>
<div>On 7/21/2023 10:15 PM, John Carlson
wrote:<br>
</div>
<blockquote type="cite">
Linux folks:
<div dir="auto"><br>
</div>
<div dir="auto">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?</div>
<div dir="auto"><br>
</div>
<div dir="auto">Thanks!</div>
<div dir="auto"><br>
</div>
<div dir="auto">Should be fairly easy to write?</div>
<div dir="auto"><br>
</div>
<div dir="auto">John </div>
<br>
<fieldset></fieldset>
<pre>_______________________________________________
x3d-public mailing list
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a>
</pre>
</blockquote>
<div>-- <br>
<b>Leonard Daly</b><br>
3D Systems Engineering<br>
President, Daly Realism - <i>Creating the Future</i><br>
</div>
</div>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div>