[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[LDM #UKU-190526]: LDM - PIPE usage in pqact.conf and bash scripts

Hi Mike,

I appreciate AND empathize with your comments about the pains of learning
how to do create shell scripts from popular press books (although the
O'Reilly are typically some of the best).  I find myself in much the same
boat... my scripting language of choice is Tcl (of Tcl/Tk) mainly since
I was forced to learn it in order to use Tk.  The good news is that the
books I read on Tcl were chock full of useful examples that could be
run as is and produce expected results and then modified to experiment.

Anyway, there is a problem with the last script that I sent you.  The
'if' clause  is not correct.  It should read:

# Log results
if $?; then
  echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: Error writing ncdump 
output, exit status = $?"
  echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: FILE $1
  rm -f $DIRS/pipencdump

Steve pointed this out to me noting that 'if false; then' will always evaluate
to false since false is actually a program:

man false
FALSE(1)                         User Commands                        FALSE(1)

       false - do nothing, unsuccessfully

       false [ignored command line arguments]
       false OPTION

       Exit with a status code indicating failure.

So, the first branch of the script as sent would never be executed.

Also, it would be a good idea to check the exit status of each
program that is run so that execution would not continue past such
an error.  In the spirit of this notion, I offer the following rewrite
of ldmfile.sh:


# Name: ldmfile.bash
# Purpose: file an LDM product and log the receipt of the product
# Note: modify the "log" file for a specific use!
# History: 20070412 - Created from example Bourne shell script
# provided by Unidata
# 20070416 - Modified by Tom at Unidata

# set log file
exec >>$LOG 2>&1

# Create directory structure
FNAME=$(basename $1)
DIRS=$(echo $1 | sed s/$FNAME//)
mkdir -p $DIRS

# Write stdin to the designated file
gunzip -cf > $DIRS/pipencdump
if $?; then
  echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: Error gunziping input, exit 
status = $?"

# Create an ASCII version of the netCDF
ncdump $DIRS/pipencdump > $1
if $?; then
  echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: Error writing ncdump 
output, exit status = $?"

# Success
echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: FILE $1
rm -f $DIRS/pipencdump

# done


Unidata User Support                                    UCAR Unidata Program
(303) 497-8642                                                 P.O. Box 3000
address@hidden                                   Boulder, CO 80307
Unidata HomePage                       http://www.unidata.ucar.edu

Ticket Details
Ticket ID: UKU-190526
Department: Support LDM
Priority: Normal
Status: Closed

NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.