[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 = $?"
else
  echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: FILE $1
  rm -f $DIRS/pipencdump
fi

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)

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       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:

#!/bin/bash

#---------------------------------------------------------------------
#
# 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
LOG=/usr/local/ldm/MADIS_data/logs/MADIS_log
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 = $?"
  exit
fi

# 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 = $?"
  exit
fi

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

# done
exit

Cheers,

Tom
****************************************************************************
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.