On Fri 12 Aug 2005 09:33:54 +0800 Xu Qiang <[EMAIL PROTECTED]> wrote:

 >              find / -type f -name core -print | while read COREFILE ; do
 >                      NCOREFILES=$[ $NCOREFILES + 1 ] # a bit strange - xq
 >                      echo $NCOREFILES # xq
 > 
 >                      NEWNAME="${HOSTNAME}esscore${NCOREFILES}_${TIMESTAMP}"
 >                      # record mapping so people can go back and figure out
 >                      # where they came from
 >                      echo -e $NEWNAME "    was    " `ls -l $COREFILE` >> 
 > $SAVE_DIR/$CORELOG
 >                      mv $COREFILE $SAVE_DIR/$NEWNAME
 > 
 >                      echo "There are $NCOREFILES core files." # xq
 >              done
 > 
 >      fi
 > 
 >      # What confused me most is the value $NCOREFILES outside 
 >      # the do-while loop (but still in this function) reverted 
 >      # back to its initial value, which seems contradictory to 
 >      # our concept of local variables. - xq
 >      #echo $NCOREFILES 

It's been pointed out that the find piped to while runs in a subshell,
and that changes to variables within aren't seen by its parent, but one
way around this is to avoid using a pipe, thus a subshell, for instance:

    find / -type f -name "*.core" -print >tempfile
    while read COREFILE; do
        [.. stuff ..]
        NCOREFILES=$(($NCOREFILES + 1))
    done <tempfile
    echo $NCOREFILES

I use sh, not bash, but suspect that this should work in bash too.

cheers, Ian

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to