SUMMARY: korn shell vs bourne shell on Solaris 2.5.1
TOBY POTTS (tobypotts@pmsc.com)
Thu, 08 May 1997 09:07:19 -0400
     
     Thanks to all who replied:
     
     ranks@avnasis.jccbi.gov (James T Ranks)
     John Justin Hough <john@oncology.uthscsa.edu>
     John Ballard <johnb@ocean.washington.edu>
     Glenn Satchell <Glenn.Satchell@uniq.com.au>
     vvuppa@unix.cis.state.mi.us (Vasu Vuppala (DCCI))
     Mike Nibeck <nibeck@Pentagon-EMH6.army.mil>
     
     
     The ORIGINAL question is at the bottom of this message.  The majority 
     of you answered with the following:
     
     The pipe that was used runs as a subshell.
     
     From the sh man pages:
     
     Because commands in pipelines are run as separate processes, variables 
     set in a pipeline have no effect on the parent shell.
     
     Again, thanks to all who responded.
     
     
     ORIGINAL Q:
     
     Hello all,
     
     I have a shell script that I am trying to run which parses through our 
     Oracle Database file (oratab).
     
     Korn Shell seems to value a variable within a WHILE statement, and 
     re-value it AFTER the WHILE to its original value.  Is this normal for 
     the Korn shell????
     
     Logic...
     
     
     db_there="NO"
     cat $ORATAB | while read LINE  && [ "$db_there" = "NO" ] do
     case $LINE in
     \#*)            ;;      #comment-line in oratab *)
     ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`
     
     # Set up environment and export for called programs if [ "$ORACLE_SID" 
     = "${dbn}" ]
     then db_there="YES"
     echo "$ORACLE_SID in oratab : db_there is $db_there."
     fi
     ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`
     esac
     done
     echo "after done, db_there is $db_there"
     
     if [ "$db_there" = "NO" ]
     then echo "${dbn}:${ORACLE_HOME}:N" >> $ORATAB
     fi
     
     -------------
     
     I set db_there to its initial value (NO) at the top.  Then db_there is 
     set to YES if the value is found in the oratab file.  BUT, after the 
     script executes the "done" for the "which" statement, it seems to 
     re-value db_there to NO again.
     
     Does anyone have an explanation for this????  Any suggestions would be 
     VERY MUCH appreciated.
     
     Toby Potts
     Policy Management Systems Corporation